PROC基础知识之CURSOR变量

          CURSOR 类型的变量是指向Oracle Server 中用PL/SQL 定义并打开的一个游标。

         使用CURSOR 类型变量具有以下优点:

Ø       容易管理

ü       查询过程集中化,在数据库服务器的PL/SQL 中打开游标变量,如果需要改变查询过程,只需改变PL/SQL 语句即可,无需改动每个应用程序。

Ø       安全

ü       对特殊的应用,只需给应用程序连接到数据库用户执行存储过程的权限,通过具有访问权限的存储过程访问该数据库用户没有权限访问的表

定义cursor变量

         采用SQL_CURSOR 关键字定义cursor 变量

          SQL_CURSOR 要么全部大写,要么全部小写。如:

EXEC SQL BEGIN DECLARE SECTION;

              sql_cursor emp_cursor;

              SQL_CURSOR dept_cursor;

              sql_cursor *ecp;

EXEC SQL END DECLARE SECTION;

ecp=&emp_cursor;

          SQL_CURSOR类型经过proc预编译处理后,也将转换成C语言的一个结构类型

         可以像VARCHAR类型那样进行函数参数传递等操作

分配cursor变量:

         在可以使用(OPEN/FETCH)一个CURSOR 变量前,需要用一个ALLOCATE 语句对该变量进行资源分配。例如前面中提到的变量emp_cursor

Ø       EXEC SQL ALLOCATE :emp_cursor;

          ALLOCATE 语句在预编译时给cursor 变量分配堆内存空间,在CLOSE 语句或连接关闭时收回所分配的堆空间

Ø       EXEC SQL CLOSE :emp_cursor;

打开cursor变量:

         打开cursor 变量有两种模式,示例如下:

Ø       使用一个命名的PL/SQL 存储过程

Ø       Pro*C/C++中使用匿名的PL/SQL 语句块

EXEC SQL EXECUTE

                     BEGIN

                            OPEN :emp_cursor FOR SELECT ename FROM emp

                            WHERE deptno = :dept_num;

                     END;

END-EXEC;

 

EXEC SQL WHENEVER NOT FOUND DO break;

for (;;)

{

                     EXEC SQL FETCH :emp_cursor INTO :emp_name;

                     printf("%s/n", emp_name);

}

关闭/释放cursor变量:

         调用“EXEC SQL CLOSE :变量名语句关闭不需要用的CURSOR

Ø       EXEC SQL CLOSE :emp_cursor;

         可以在应用程序中任意多次的OPENFETCHCLOSE 游标变量,但如果用户断开数据库连接后重新连接到数据库,则必须调用ALLOCATE 对游标变量进行重新的资源分配。

         释放关闭了的SQL_CURSOR 变量资源,采用EXEC SQL FREE 语句

Ø       EXEC SQL FREE :emp_cursor;

         释放后的游标,如果需要重新使用,需要重新进行ALLOCATE

cursor变量使用限制:

         动态SQL 语句中不能使用SQL_CURSOR 类型变量

         只能对SQL_CURSOR 变量使用ALLOCATEFETCHFREE CLOSE

          DELCARE CURSOR 命令并不提供SQL_CURSOR 类型的变量

         不能对一个CLOSE/FREE SQL_CURSOR 变量进行FETCH

         如果预编译器参数MODE=ANSI,则CLOSE 一个已经CLOSE 的游标将引发一个错误产生

         ALLOCATE 语句不能采用AT 子句,同理根这个SQL_CURSOR 变量关联的FETCH CLOSE 语句也不能采用AT 子句

          SQL_CURSOR 变量不能保存到数据库表中

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值