PL/SQL 游标简单入门

本文详细介绍了Oracle数据库中显式游标的声明、打开、读取和关闭过程。通过实例展示了如何使用游标进行数据检索,包括声明游标、设置参数、读取数据并输出结果的完整流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

显式游标

声明游标主要包括游标名称和为游标提供结果集的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;

总结:这是自己学习时的一些东西,感觉无聊之际写个学习博客挺好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值