- 浏览: 200411 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
w156445045:
数据全部不要了。
truncate table 表名
用这 ...
SQL Server 自增字段归零(id)从1开始累加 -
unimme:
cas-3.1.1怎么用啊?
在Tomcat中使用Yale CAS实现单点登陆(SSO) 文章合集 -
wait10000y:
...
防止双击Button,点击后让Button失效 -
mamacmm:
支持!
我这有个问题,不知道是否也是CAS的BUG问题:
...
在Tomcat中使用Yale CAS实现单点登陆(SSO) 文章合集 -
InnocentBoy:
不行,我的是5.0它部署的东西在tmp里。
jboss热部署
游标(Cursor)
游标(Cursor):用来查询数据库,获取记录集合(结果集)的指针,可以让开发者一次访问一行结果集,在每条结果集上作操作。
游标可分为:
<!--[if !supportLists]-->l <!--[endif]-->静态游标:分为显式(explicit)游标和隐式(implicit)游标。
游标可分为:
<!--[if !supportLists]-->l <!--[endif]-->静态游标:分为显式(explicit)游标和隐式(implicit)游标。
<!--[if !supportLists]-->l <!--[endif]-->REF游标:是一种引用类型,类似于指针。----也称为动态游标
select * from employees where department_id = p_deptid;
l_emp employees%rowtype;
open emp_cur(30);
|
|
游标FOR循环,简化游标操作my_dept_rec 不需要声明 declare begin for my_dept_rec in ( select department_name, department_id from epartments) loop dbms_output.put_line(my_dept_rec.department_id || ' : ' || my_dept_rec.department_name); end loop; end; / |
在执行任何DML语句前SQL%FOUND和SQL%NOTFOUND的值都是NULL,在执行DML语句后,SQL%FOUND的属性值将是:
. TRUE :INSERT
. TRUE :DELETE和UPDATE,至少有一行被DELETE或UPDATE.
. TRUE :SELECT INTO至少返回一行
当SQL%FOUND为TRUE时,SQL%NOTFOUND为FALSE.SQL%ROWCOUNT
在执行任何DML语句之前,SQL%ROWCOUNT的值都是NULL,对于SELECT INTO语句,如果执行成功,SQL%ROWCOUNT的值为1,如果没有成功,SQL%ROWCOUNT的值为0,同时产生一个异常NO_DATA_FOUND.
SQL%ISOPEN
SQL%ISOPEN是一个布尔值,如果游标打开,则为TRUE, 如果游标关闭,则为FALSE.对于隐式游标而言SQL%ISOPEN总是FALSE,这是因为隐式游标在DML语句执行时打开,结束时就立即关闭。
|
尽量使用隐式游标,避免编写附加的游标控制代码(声明,打开,获取,关闭),也不需要声明变量来保存从游标中获取的数据。
2、REF CURSOR游标
动态游标,在运行的时候才能确定游标使用的查询。可以分为:
<!--[if !supportLists]-->l <!--[endif]-->强类型(限制)(Strong REF CURSOR),规定返回类型
<!--[if !supportLists]-->l <!--[endif]-->弱类型(非限制)(Weak REF CURSOR),不规定返回类型,可以获取任何结果集。
|
CREATE OR REPLACE PACKAGE emp_data AS
TYPE empcurtyp IS REF CURSOR RETURN emp%rowtype;
--定义Strong REF CURSOR
PROCEDURE open_emp_cv(emp_cv IN OUT empcurtyp, choice INT);
--根据不同的choice选择不同的CURSOR
PROCEDURE retrieve_data(choice INT);
--通过调用procedure open_emp_cv,返回指定的结果集。
END emp_data;
|
--emp_cv作为传入/传出的CURSOR PARAMETER
OPEN emp_cv FOR SELECT * FROM emp WHERE empno < 7800;
OPEN emp_cv FOR SELECT * FROM emp WHERE SAL < 1000;
OPEN emp_cv FOR SELECT * FROM emp WHERE ename like 'J%';
return_cv empcurtyp;
--定义传入open_emp_cv的CURSOR变量
return_row emp%ROWTYPE;
invalid_choice EXCEPTION;
DBMS_OUTPUT.PUT_LINE('EMPLOYEES with empno less t han7800');
DBMS_OUTPUT.PUT_LINE('EMPLOYEES with salary less than 1000');
DBMS_OUTPUT.PUT_LINE('EMPLOYEES with name starts with ''J''');
RAISE invalid_choice;
FETCH return_cv INTO return_row;
EXIT WHEN return_cv%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(return_row.empno || '--' || return_row.ename || '--' ||
WHEN invalid_choice THEN
DBMS_OUTPUT.PUT_LINE('The CHOICE should be in one of (1,2,3)!');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Errors in procedure RETRIEVE_DATA!');
|
--参数return_cv为weak REF CURSOR,利用SYS_CURSOR来定义
/*使用SYS_REFCURSOR可以使变量any_cv跟任何weak REF CURSOR类型匹配。 */
open return_cv for 'select * from emp';
open return_cv for 'select * from dept';
|
dbms_output.put_line('employee information');
open_cv(1,return_cv); --调用procedure open_cv;
loop
fetch return_cv into emp_rec;
exit when return_cv%notfound;
dbms_output.put_line(emp_rec.empno||'-'||emp_rec.ename||'-'||emp_rec.sal);
end loop;
dbms_output.put_line('department information');
open_cv(2,return_cv);
loop
fetch return_cv into dept_rec;
exit when return_cv%notfound;
dbms_output.put_line(dept_rec.deptno||'-'||dept_rec.dname||'-'||dept_rec.loc);
end loop;
raise invalid_choice;
when invalid_choice then
dbms_output.put_line('The CHOICE should be one of 1 and 2!');
dbms_output.put_line('Errors in procedure retrieve_data');
|
/* 定义复杂类型 */
type empcurtyp is ref cursor;
type idlist is table of emp.empno%type;
type namelist is table of emp.ename%type;
type sallist is table of emp.sal%type;
emp_cv empcurtyp;
ids idlist;
names namelist;
sals sallist;
row_cnt number;
begin
open emp_cv for select empno, ename, sal from emp;
fetch emp_cv BULK COLLECT INTO ids, names, sals;
--将字段成批放入变量中,此时变量是一个集合
close emp_cv;
for i in ids.first .. ids.last loop
dbms_output.put_line(' || ids(i) || ' || names(i) ||' salary=' || sals(i));
end loop;
FORALL i IN ids.first .. ids.last
insert into tab2 values (ids(i), names(i), sals(i));
commit;
select count(*) into row_cnt from tab2;
dbms_output.put_line('-----------------------------------');
dbms_output.put_line('The row number of tab2 is ' || row_cnt);
|
从技术底层看,两者是相同的。普通plsql cursor在定义时是“静态”的。而
例如下面例子:
|
<!--[if !supportLists]-->l <!--[endif]-->rc根据逻辑动态打开;而游标c定义好了只有就无法修改了。
<!--[if !supportLists]-->l <!--[endif]-->ref cursor可以返回给客户端,cursor则不行。
<!--[if !supportLists]-->l <!--[endif]-->cursor可以是全局的global ,ref cursor则必须定义在过程或函数中。
<!--[if !supportLists]-->l <!--[endif]-->ref cursor可以在子程序间传递,cursor则不行。
<!--[if !supportLists]-->l <!--[endif]-->cursor中定义的静态sql比ref cursor效率高,所以ref cursor通常用在:向客户端返回结果集。
发表评论
-
SQLServer2005删除log文件和清空日志的方案
2012-12-21 23:40 923以下内容转自:http://www.cnblogs.com/o ... -
数据库2012-04-05 14:53 sql server 2005查看鎖定及解鎖
2012-12-21 20:12 746以下内容转自:http://hi. ... -
SQL Server 自增字段归零(id)从1开始累加
2011-05-04 16:51 3726SQL Server 2005表自增字段在多次插入数据后, ... -
windows下的MySQL数据库自动备份方法
2011-04-25 16:45 1060windows下的MySQL数据库自动备份方法 关键字: w ... -
MySQL创建新用户/删除用户
2011-04-25 16:24 9271.mysql创建新用户并设权限命令 工作中用到web服 ... -
mysql创建新用户的命令
2011-04-25 16:23 969//创建用户(用户名:min 密码:123) Sql ... -
MySQL修改root密码的多种方法
2011-04-25 16:22 625方法1: 用SET PASSWORD命令 [url=java ... -
Mysql 在windows下解压版配置说明
2011-04-25 16:21 1045MySql数据库硬盘版的安装,分小型数据库、中型数据库、大型数 ... -
用java调用oracle存储过程总结
2010-12-07 14:54 678以下内容转自:http://www.blogjava.net/ ... -
SQL指令— CONCAT(字符串连接函数)
2010-12-06 14:49 1448以下内容转自:http://www.webkey.cn/c ... -
MySQL Reset User Password Script
2009-08-05 11:41 926SET PASSWORD FOR 'jeffrey'@'loc ... -
java调用oracle存储过程
2009-07-28 16:12 743一:无返回值的存储过程 存储过程为: CREATE OR ... -
Oracle系列:Cursor
2009-07-27 17:12 1038Oracle系列:Cursor 1,什么是游标? ①从表中检 ... -
使用v$logmnr_contents查看日志文件
2009-05-13 16:28 3824以下内容引自:http://www ... -
Oracle调试存储过程
2009-04-29 18:14 2553以下内容转自:http://hi.baidu.com/even ... -
Oracle 存储过程中 Else If 写法
2009-04-29 17:35 4345If ...... Then elsif .... T ... -
Oracle存储过程中使用cursor
2009-04-29 16:45 1571CREATE OR REPLACE PROCEDURE GLU ... -
Oracle update from 写法
2009-04-29 16:43 2632UPDATE (SELECT /*+ BYPASS_UJVC ... -
利用oracle发送邮件
2009-04-17 14:05 895CREATE OR REPLACE PROCEDURE sen ... -
深入浅出理解索引结构(4)
2009-02-24 14:22 72611、order by按聚集索引列排序效率最高 我们来看 ...
相关推荐
oracle-游标使用汇总,觉得不错所以转了
Oracle 遍历游标的四种方式(for、fetch、while、bulk collect+forall) 2.问题分析 我们可以把游标想象成一张表,想要遍历游标,就要取到游标的每行数据,所以问题的关键就成了:如何取到行数据? 3.解决方案 ...
自己写的一个数据库语句,涉及游标,飞类汇总,行换列,适合入门的同学参考!
2 Oracle:plsql,游标 6分 3 Oracle:sql命令 8分 4 Oracle:数据库创建,授权 6分 5 Oracle:plsql块 5分 6 Oracle:过程与函数 6分 7 Oracle:plsql块 6分 8 Oracle:plsql,过程与函数 8分 9 Oracle:建表,组合索引 6分...
Oracle Exception汇总(自定义Oracle异常) 使用方法举例: Exception When no_data_found then Dbms_output.put_line(‘no_data_found’); ACCESS_INTO_NULL 为对象赋值前必需初始化对象。对应ORA-06530错误。 CASE...
ORACLE经典语句汇总 -- 字符串左填充和右填充,默认填充空格 -- 产生1~99行数据,少于一位则补0 -- 刪除相同行 -- 随机数 -- 产生业务流水号 -- 查询某张表中有哪些字段 -- 自循环表中 由叶子节点查父节点 -- 查子...
本课程适应从事大数据行业开发人员或数据库开发人员以及BI开发人员,其中包含有ORACLE的理论基础知识,OracleSQL语句详细讲解、面试问题汇总、BI理论知识。汇总了Oracle在开发中常用到的各种函数如分析函数、开窗...
从存储过程 自定义函数格式 游标 变量 赋值 语句结束符 大小写 Select 语法 Update语法 Delete语法 动态SQL语句 TOP用法 等各方面对比两个数据库的差异
并在Oracle11g的环境中,对书中的全部例子进行了运行(其中大部分例子都以具体操作界面的形式添加到书中),以给读者构造一个真实、有序、合理、坚实、正确和专业的Oracle知识结构。 《Oracle11g宝典》是Oracle...
1.在多进程Oracle实例系统中,进程分为用户进程、后台进程和服务进程。 2.标准的SQL语言语句类型可以分为:数据定义语句(DDL)、数据操纵语句(DML)和数据控制语句(DCL)。 3.在需要滤除查询结果中重复的行时,必须...
汇总oracle一些常用SQL语句,比如:用户解锁、修改用户密码、锁表、视图恢复、定时任务、物化视图、触发器、带参游标、常用函数、执行计划、字符串/时间各种运算、HTTP请求、SQL优化等
在子查询中使用汇总函数140 子查询的嵌套141 相关子查询144 EXISTS ANY ALL 的使用147 总结151 问与答151 校练场152 练习153 第一周回顾154 预览154 第二周概貌155 这一周都讲些什么155 第八天操作数据156 目标...
第9章 汇总数据 51 9.1 聚集函数 51 9.1.1 AVG()函数 52 9.1.2 COUNT()函数 53 9.1.3 MAX()函数 54 9.1.4 MIN()函数 54 9.1.5 SUM()函数 55 9.2 聚集不同值 56 9.3 组合聚集函数 57 9.4 小结 58 第10章 ...
第9章 汇总数据 第10章 分组数据 第11章 使用子查询 第12章 联结表 第13章 创建高级联结 第14章 组合查询 第15章 插入数据 第16章 更新和删除数据 第17章 创建和操纵表 第18章 使用视图...
第9章 汇总数据...... 51 9.1 聚集函数..... 51 9.1.1 AVG()函数..... 52 9.1.2 COUNT()函数..... 53 9.1.3 MAX()函数..... 54 9.1.4 MIN()函数..... 54 9.1.5 SUM()函数..... 55 9.2 聚集不同值..... 56 9.3 组合...
3.4.5 刷新页面的方法汇总 149 3.4.6 页面事件控制 150 3.4.7 在URL中传递中文的解决方案 152 3.4.8 增强用户体验的一些技巧 153 3.4.9 XHTML与HTML的区别 156 3.5 打造自己的页面基类PageBase 161 本章常见技术面试...
3.4.5 刷新页面的方法汇总 149 3.4.6 页面事件控制 150 3.4.7 在URL中传递中文的解决方案 152 3.4.8 增强用户体验的一些技巧 153 3.4.9 XHTML与HTML的区别 156 3.5 打造自己的页面基类PageBase 161 本章常见技术面试...