oracle plsql 动态sql,『ORACLE』 PLSQL动态游标的使用(11g)

动态游标由于含有参数,对于sql语句的解析必须要等到参数确定的时候才能完成。

从这个角度来说,静态游标的效率也比动态游标更高一些。

#游标的相关概念:

定义:

游标它是一个服务器端的存储区,这个区域提供给用户使用,在这个区域里

存储的是用户通过一个查询语句得到的结果集,用户通过控制这个游标区域当中

的指针 来提取游标中的数据,然后来进行操作。

实质:

是用户在远程客户端上对服务器内存区域的操作,由数据库为用户提供这样的

一个指针,使得用户能够去检索服务器内存区的数据。

#游标具有的属性:

1、%ISOPEN(确定游标是否已经打开 true or false)

2、%FOUND(返回是否从结果集提取到了数据 true or false)

3、%NOTFOUND(返回是否从结果集没有提取到数据 true or false)

4、%ROWCOUNT(返回到当前为止已经提取到的实际行数)

#游标分类

一、静态游标

1、隐式游标:

对于select..into...语句,一次只能从数据库中获取到一条数据,对于这种类型的DML SQL语句,就是隐式cursor

select update/insert/delete操作

2、显示游标:

由程序员定义和管理,对于从数据库中提取多行数据,就需要使用显式cursor

1)定义游标---cursor  [cursor name]  is

2)打开游标---open    [cursor name]

3)操作数据---fetch    [cursor name]

4)关闭游标---close    [cursor name]

二、REF游标

1、REF 游标:动态关联结果集的临时对象。即在运行的时候动态决定执行查询。

2、REF 游标作用:实现在程序间传递结果集的功能,利用REF CURSOR也可以实现BULK SQL,从而提高SQL性能。

3、静态游标和REF 游标的区别:

①静态游标是静态定义,REF 游标是动态关联;

②使用REF 游标需REF 游标变量。

③REF 游标能做为参数进行传递,而静态游标是不可能的。

4、REF 游标变量:是一种引用REF游标类型的变量,指向动态关联的结果集。

5、怎么使用REF游标:

①声明REF 游标类型,确定REF 游标类型;

⑴强类型REF游标:指定retrun type,REF 游标变量的类型必须和return type一致。

语法:Type   REF游标名   IS   Ref Cursor Return  结果集返回记录类型;

⑵弱类型REF游标:不指定return type,能和任何类型的CURSOR变量匹配,用于获取任何结果集。

语法:Type   REF游标名   IS   Ref Cursor;

②声明Ref 游标类型变量;

语法:变量名  已声明Ref 游标类型;

③打开REF游标,关联结果集 ;

语法:Open  Ref 游标类型变量 For 查询语句返回结果集;

④获取记录,操作记录;

语法:Fatch  REF游标名 InTo 临时记录类型变量或属性类型变量列表;

⑤关闭游标,完全释放资源;

语法:Close  REF游标名;

例:

SQL> declare

2 type emp_cursor is ref cursor;

3 my_cursor emp_cursor;

4 v_ename emp.ename%type;

5 v_sal emp.sal%type;

6 v_deptno dept.deptno%type := &p_deptno;

7 v_dname dept.dname%type;

8 begin

9 select dname into v_dname from dept where deptno = v_deptno;

10 dbms_output.put_line(‘Department:‘ || v_dname);

11 open my_cursor for

12 select ename, sal from emp where deptno = v_deptno;

13 loop

14 fetch my_cursor

15 into v_ename, v_sal;

16 exit when my_cursor%notfound;

17 dbms_output.put_line(‘--name:‘ || v_ename || ‘salary:‘ || v_sal);

18 end loop;

19 close my_cursor;

20 end;

21 /

Enter value for p_deptno: 30

old 6: v_deptno dept.deptno%type := &p_deptno;

new 6: v_deptno dept.deptno%type := 30;

Department:SALES

--name:ALLENsalary:1600

--name:WARDsalary:1250

--name:MARTINsalary:1250

--name:BLAKEsalary:2850

--name:TURNERsalary:1500

--name:JAMESsalary:950

PL/SQL procedure successfully completed.

『ORACLE』 PLSQL动态游标的使用(11g)

标签:11g   属性   运行   completed   动态游标   put   服务器   als   complete

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉 本文系统来源:http://www.cnblogs.com/KT-melvin/p/6854104.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值