游标FOR循环
游标FOR循环是游标使用的最简单的方式,当使用游标FOR循环时,Oracle会隐含地打开游标、提取游标
数据并关闭游标。
语法格式: FOR record_name IN cursor_name Loop
statement1;
statement2;
end Loop;
cursor_name是已经定义的游标名;record_name是Oracle隐含定义的记录变量名(可以是任意名)
当使用游标FOR循环时,在执行循环体内容之前,Oracle会隐含地打开游标,并且每循环一次提取一次
数据,在提取了所有数据之后,会自动退出循环并隐含地关闭游标。
例子: declare
CURSOR emp_cursor IS select ename,sal from emp;
begin
FOR emp_record IN emp_cursor LOOP
dbms_output.put_line();
END LOOP;
end;
使用游标变量---打开游标变量时指定其所对应的select语句。
游标变量使用步骤:
(1)定义REF CURSOR类型和游标变量
语法如下: TYPE ref_type_name IS REF CURSOR[RETURN return_type];
cursor_variable ref_type_name;
ref_type_name 用于指定自定义类型名;
cursor_variable 指定游标变量名.
当使用指定return子句时,其数据类型必须是记录类型;
(2)打开游标
open cursor_variable for select_statement;
(3)提取游标、关闭游标。
eg: declare
TYPE emp_record_type IS RECORD(name VARCHAR2(10),salary NUMBER(6,2));
TYPE emp_cursor_type IS REF CURSOR RETURN emp_record_type;
emp_cursor emp_cursor_type;
emp_record emp_record_type;
begin
open emp_cursor for select ename,sal from emp where deptno=20;
Loop
FETCH emp_cursor INTO emp_record;
EXIT WHEN emp_cursor%NOTFOUND;
dbms_output.put_line();
end Loop;
close emp_cursor;
end;
游标FOR循环是游标使用的最简单的方式,当使用游标FOR循环时,Oracle会隐含地打开游标、提取游标
数据并关闭游标。
语法格式: FOR record_name IN cursor_name Loop
statement1;
statement2;
end Loop;
cursor_name是已经定义的游标名;record_name是Oracle隐含定义的记录变量名(可以是任意名)
当使用游标FOR循环时,在执行循环体内容之前,Oracle会隐含地打开游标,并且每循环一次提取一次
数据,在提取了所有数据之后,会自动退出循环并隐含地关闭游标。
例子: declare
CURSOR emp_cursor IS select ename,sal from emp;
begin
FOR emp_record IN emp_cursor LOOP
dbms_output.put_line();
END LOOP;
end;
使用游标变量---打开游标变量时指定其所对应的select语句。
游标变量使用步骤:
(1)定义REF CURSOR类型和游标变量
语法如下: TYPE ref_type_name IS REF CURSOR[RETURN return_type];
cursor_variable ref_type_name;
ref_type_name 用于指定自定义类型名;
cursor_variable 指定游标变量名.
当使用指定return子句时,其数据类型必须是记录类型;
(2)打开游标
open cursor_variable for select_statement;
(3)提取游标、关闭游标。
eg: declare
TYPE emp_record_type IS RECORD(name VARCHAR2(10),salary NUMBER(6,2));
TYPE emp_cursor_type IS REF CURSOR RETURN emp_record_type;
emp_cursor emp_cursor_type;
emp_record emp_record_type;
begin
open emp_cursor for select ename,sal from emp where deptno=20;
Loop
FETCH emp_cursor INTO emp_record;
EXIT WHEN emp_cursor%NOTFOUND;
dbms_output.put_line();
end Loop;
close emp_cursor;
end;