游标的操作(一)(本文适合全部读完而非查找某一信息)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wufeifan_learner/article/details/79947826

SQL是面向集合的,一条SQL语句可以产生或处理多条记录。

主语言是面向记录的,一组主变量只能存放一条记录。

所以仅使用朱变量并不能完全满足SQL语句向应用程序输出数据的要求,为此嵌入式SQL引入了游标的概念。


游标(cursor):系统为用户开设了一个数据缓冲区,存放SQL语句的执行结果,每个游标区都有一个名字。用户可以通过游标逐一获取记录,并付给主变量,交由主语言进一步处理。游标分为显示游标和隐式游标,重点说显示游标。


这里不说游标与主语言的连接,只说游标的操作形式。

  1. 定义游标:将游标名与SQL查询结果相关联
  2. 打开游标:激活游标指针,指向缓冲区首部
  3. 提取当前结果到SQL变量中:将当前结果提取到主变量中,游标指针下移
  4. 关闭游标:断开关联,释放缓冲区空间

具体说游标操作之前,我们要先将查询结果列出,以用于select语句内容:

declare 
  v_deptid departments.department_id % type;
  v_dname departments.department_name % type;  
意义为:定义变量 v_deptid 与 v_dname,其属性类型与 department 中的 department_id 和 department_name 的类型相同。%type为关键字
下面给出部分属性表:
属性表及其描述
游标属性描述
游标名 % ISOPEN   值为bool型,若游标已打开,取值为TRUE
游标名 % NOTFOUND值为bool型,如果最近一次fetch操作没有返回结果,则取值为TRUE
游标名 % FOUND值为bool型,如果最近一次fetch操作没有返回结果,则取值为FALSE,反之为TRUE
游标名 % ROWCOUNT值为number型,值是到当前为止返回的记录数


定义游标:

cursor 游标名[(参数名1 数据类型),......]   is  select   语句;

例如:

cursor C1 is select empolyee_id, department_id from empolyees;
完整写下来就是:
declare: 
   v_deptid departments.department_id % type;
   v_dname departments.department_name % type;
cursor c_dept is select * from departments      --游标c_dept与查询结果相关联
where department_id = v_deptid and department_name = v_dname;
按理说,现在的v_deptid是没有意义的,因为作为一个变量,他没有任何值,所以我们要赋值:
declare v_deptid departments.department_id % type:=&p_deptid;

这里的p_deptid 是已经定义好的变量,需要输入值。&用法请见点击打开链接


打开游标:

open 游标名[(实际参数值1),.........]

例如:

open C1;

这项简单不必多说。


取值到变量:

fetch 游标名 into 变量1 [变量2······];

或:fetch 游标名 into PL/SQL_RECORD;

与select语句中列的数据类型,前后顺序要一致。


关闭游标:

close 游标名;

例如:

close C1;

不赘述。

实例以及更多内容请看:游标的操作(二)



阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页