显示游标的创建与使用

目录

声明游标

打开游标

读取游标

关闭游标


oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645

前面已经提到过使用显式游标需要 4 个步骤:声明游标、打开游标、读取游标和关闭游标。下面就说明显式游标如何创建和使用。

声明游标

CURSOR 游标名称 [ 参数列表 ] IS <SELECT 语句 >

其中,参数列表是可选项,如果需要参数

参数名称 [IN] 数据类型 [{:=|DEFAULT} 参数值 ]

需要注意的是,参数只能定义数据类型,但是不能有大小,可以给参数设定一个默认值,

此时,调用的时候如果没有参数数值传递给游标时,就使用这个默认值。参数可以有多个

此外,定义游标的时候还要注意以下几点

● 游标必须在 PL/SQL 数据库的声明部分中定义。

● 定义游标时并没有生成数据,只是将定义信息保存到数据字典中。

● SeLect 语句不能包含 INtO 子句。

例如,下面的语句定义一个游标 cur_emp,该游标用来读取 emp 数据表中所有员工的员工号和姓名信息。

CURSOR cur_emp IS SELECT empno,ename FROM emp;

 上面这个例子没有使用参数,下面这个例子使用了参数

CURSOR cur_emp(var_job IN VARCHAR2:='clerk') IS SELECT empno,ename FROM emp WHEREjob=var_job;

在上面这个例子中,游标定义了一个输入参数 var_job,数据类型为 varchar2,但是要注意此时并没有定义长度,如果定义长度就错了。

这个参数用来接受外部传来的值,如果调用游标时没有传入参数,则使用默认值“clerk”,游标实现查询 emp 表中部门参数 var_job 中的所有员工的信息

打开游标

游标定义完成后,还不能直接使用,在使用之前,必须先打开。打开游标的基本语法如下所示

OPEN 游标名称 [ 参数值 ]

其中,参数值是可选项。如果在游标声明的时候定义了参数,并有初始化值,但打开的时候没有使用参数,则游标就使用定义时参数的初始值;

如果打开的时候指定了参数值,则游标就使用这个参数值。

同样,这里和声明时参数可以有多个一样,参数值也可以有多个。

例如,下面例子打开游标 cur_emp

OPEN cur_emp;

如果带参数值,可以使用下面的语句。

OPEN cur_emp(‘SALESMAN’)

上面这个带参数值的游标打开时,将“sAlesMAN”赋值给游标的输入参数 var_job,

当然,如果调用时没有输入参数值,则 var_job 还是用定义时默认的“clerk”。

读取游标

游标打开后,缓冲区中是查询结果,此时可以使用游标把查询结果集合中的记录分别读取出来,基本语法如下所示。

FETCH 游标名称 INTO < 变量列表 >|< 记录变量 >

游标刚打开时,游标指针指向查询结果集合中的第一条记录,使用 fetch...iNto...语句读取数据后,游标指针自动指向下一条记录。

因此,可以把 fetch...iNto...语句与循环结构相结合,读取缓冲区中所有数据,可以使用上一节介绍的游标属性判断是否还有数据,数据个数等。

注意,游标指针只能增加,不能减少,即只能向下移动,不能后退。

此外,iNto 子句中变量个数、顺序、数据类型都必须与缓冲区中每个记录的字段变量、顺序和数据类型一致,

或者说与游标定义时 select 语句中的一样。

也可以定义一个记录变量,来存储游标指向记录中的数据。比如下面这个形式

FETCH cur_emp INTO v_id,v_name;

上面语句将游标当前指向的记录中员工编号和员工姓名分别送到 v_id 和 v_name 变量中。

关闭游标

游标使用完后,要记得关闭,释放缓冲区所占用的系统资源,基本语法如下所示

CLOSE 游标名称

例如,下面语句关闭游标 cur_emp

CLOSE sur_emp;

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙子味冰可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值