oracle11g游标及触发器相关知识

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

oracle11g 游标:

1. 当在PL/SQL中使用SQL语句时,Oracle会为其分配上下文区域,这是一段

私有的内存区域,用于暂时保存SQL语句影响到的数据。游标是指向这段内存区域的指针。

2. Oracle中主要有两种类型的游标:

(1) 隐式游标:所有的DML语句和PL/SQL SELECT 语句都有;

(2) 显式游标:由开发人员声明和控制。

3. 可以使用的游标属性包括四种:%ROWCOUNT、%FOUND、%NOTFOUND、

%ISOPEN,这四种属性对于显式游标和隐式游标都有用,但是含义和使用方法略有不同。游标在使用属性时,需要以游标名称作为前缀,以表明该属性是哪个游标的,隐式游标没有名称,所以在使用隐式游标时采取了统一的一个名称SQL。

4. 在PL/SQL中的SELECT语句只能且必须取出一行数据,取出多行或者零行都

被认为是异常,所以在对多行数据进行操作时,必须使用显式游标来实现。

5. 使用显式游标的步骤:

(1)声明游标:CURSOR cursor_name is select_statement;

(2)打开游标:OPEN cursor_name;

(3)取游标中的数据:FETCH cursor_name INTO variable1,variable2,...;

(4)关闭游标:CLOSE cursor_name;

6.用变量接收游标中的数据

sql> declare

v_name emp.ename%TYPE;

v_sal emp.sal%TYPE;

cursor emp_cursor is select ename,sal from emp

where deptno=10;

begin

open emp_cursor;

loop

fetch emp_cursor into v_name,v_sal;

exit when emp_cursor%NOTFOUND;

dbms_output.put_line(v_name || ‘的薪水是’ || v_sal);

end loop;

dbms_output.put_line(‘共取出了’ || emp_cursor%ROWCOUNT || ‘条记录’);

close emp_cursor;

end;

7.通常简单LOOP循环与%NOTFOUND属性配合使用,而WHILE循环与%FOUND属性配合使用。

8.使用记录接收游标中的数据

sql> declare

cursor emp_cursor is select ename, sal from emp

where deptno=10;

--注意创建记录类型的方式

emp_record emp_cursor%ROWTYPE;

begin

open emp_cursor;

loop

fetch emp_cursor into v_name,v_sal;

exit when emp_cursor%NOTFOUND;

dbms_output.put_line(v_name || ‘的薪水是’ || v_sal);

end loop;

dbms_output.put_line(‘共取出了’ || emp_cursor%ROWCOUNT || ‘条记录’);

close emp_cursor;

end;

9.带有参数的游标的语法:

CURSOR cursor_name

[(parameter_name datatype,...)]

IS

select_statement;

10.sql> declare

cursor emp_cursor(v_deptno NUMBER) is

select ename,sal from emp where deptno=v_deptno;

emp_record emp_cursor%ROWTYPE;

begin

open emp_cursor(20);

loop

fetch emp_cursor into emp_record;

exit when emp_cursor%NOTFOUND;

dbms_output.put_line(emp_ || ‘的薪水是’ || emp_cursor.sal);

end loop;

dbms_output.put_line(‘共取出了’ || emp_cursor%ROWCOUNT || ‘条记录’);

close emp_cursor;

end;

11.游标变量:也叫做动态游标,通过REF CURSOR方式定义,它仍然是指向一段SQL语句的内存地址的指针。和动态游标相比,之前在声明时就定义好SELECT语句的游标称作静态游标,而动态游标在打开时才指定其所对应的SELECT语句。12.sql> declare

--定义游标变量类型

type dept_cursor_type is ref cursor

return dept%ROWTYPE

--定义游标变量

dept_cursor dept_cursor_type;

--定义记录类型

dept_record dept%ROWTYPE;

begin

open dept_cursor for select deptno,dname,loc

from dept;

fetch dept_cursor into dept_record;

while dept_cursor%FOUND loop

dbms_output.put_line(dept_record.deptno||’,’||dept_record.dname||’,’||dept_record.loc);

fetch dept_cursor into dept_record;

end loop;

dbms_output.put_line(‘GAME OVER’);

end;

以上定义的游标变量中指定了返回类型,也就是说,游标对应的结果集必须按照返回类型的规定来定义,这种游标称作强类型游标变量,除此之外还有一种弱类型游标变量。

13.游标的FOR循环:

for record_name in cursor_name loop

相关文档
最新文档