显式游标
声明游标主要包括游标名称和为游标提供结果集的select语句。语句格式如下:
cursor cur_name[(input_paramter1[,input_paramter2]…)]3 [return
ret_type] is select_sentence;
- cur_name: 表示所声明的游标的名称
- ret_type: 表示执行游标操作后的返回值类型,这是一个可选项
- select_sentence: 游标所使用的select语句,他为游标反复读取提供了结果集
- input_paramter1: 作为游标的输入参数,可以有多个,这是一个可选项
例如一个简单的游标声明如下:.
declare
cursor cur_emp(var_job in varchar2:='SALESMAN')
is select empno,ename,sal from emp
where job=var_job;
打开游标的语句如下所示:
open cur_emp(‘MANAGER’);
首先如上语句open打开,然后是游标名称后面括号里是你所要查询的语句参数,
当然参数也可以不写那就是一开始定义游标里面的默认值
读取游标就是用FETCH···INTO语句,其语法格式如下:
fetch cur_name into{variable};
- cur_name:要读取的游标名称.
- variable:一个变量列表或“记录”变量(RECORD类型),Oracle使用“记录”变量来存储游标中的数据,要比使用变量列表方便得多
在游标中包含一个数据行指针, 它用来指向当前数据行刚刚打开游标时, 指针指向结果集中的第一行,当使用 FETCH.INTO 语句读取数据完毕之后, 游标中的指针将自动指向下一行数据。 这样,就可以在循环结构中使用 FETCH…INTO语句来读取数据, 这样每一次循环都会从结果集中读取一行数据,直到指针指向结果集中最后一条记录之后为止 (实际上, 最后一条记录之后是不存在的, 是空的,
这 里只是表示遍历完所有的数据行), 这时游标的%found 属性值为 false
声明一个检索emp表中的雇员信息的游标,然后打开游标,并指定检索的职务是‘MANAGER’的雇员信息,接着使用FETCH···INTO语句和WHILE循环语句读取游标中的所有雇员信息,最后输出读取的雇员信息代码如下:
set serveroutput on
declare
cursor cur_emp(var_job in varchar2:='SALESMAN')
is select empno,ename,sal from emp
where job=var_job;
type record_emp is record --声明一个记录类型 (RECORD类型)
(/*定义当前记录的成员变量*/
var_empno emp.empno%type,
var_ename emp.ename%type,
var_sal emp.sal%type
);
emp_row record_emp;
begin
open cur_emp('MANAGER');--打开游标
fetch cur_emp into emp_row;--先让指针指向结果集中的第一行, 并将值保存到emp_row中
while cur_emp%found loop
dbms_output.put_line(emp_row.var_ename||'的编号是'||emp_row.var_empno||',工资是'||emp_row.var_sal);
fetch cur_emp into emp_row; --让指针指向结果集中的下一行, 并将值保存到emp_row中
end loop;
close cur_emp;--关闭游标
end;
/
-
关闭游标语法格式是:
close cur_name;
总结:这是自己学习时的一些东西,感觉无聊之际写个学习博客挺好