声明一个游标变量后,可以用OPEN FOR语句打开:
l
将游标变量和查询相互关联(通常查询返回多行),查询中可以包含绑定变量的
占位符,它的值通过USING子句来指定。
l
处理查询:识别结果集。如果查询引用变量或游标参数,它的值会受影响。如果
查询有FOR UPDATE子句,会锁住结果集。将游标定位在结果集的第一行之前。
l
使用其他的OPEN FOR再次打开游标变量之前,不需要关闭它。在重新打开游标
变量后,与它关联的前一个查询会丢失。
注意:OPEN FOR 后跟的SQL语句必须加单引号
DROP TABLE IF EXISTS t1;
CREATE TABLE t1(id INT,col VARCHAR(10));
INSERT INTO t1 VALUES(123,'abc');
INSERT INTO t1 VALUES(456,'def');
DROP TABLE IF EXISTS t2;
CREATE TABLE t2(col VARCHAR(10));
DROP PROCEDURE IF EXISTS pro5;
CREATE OR REPLACE PROCEDURE pro5 AS
p_id INT:=456;
v_col VARCHAR(10);
TYPE t1CurTyp IS REF CURSOR;
cursor_a t1CurTyp;
BEGIN
OPEN cursor_a for 'SELECT col FROM t1 WHERE id=?' USING p_id;
GBase 8s PL/SQL手册
南大通用数据技术股份有限公司
- 112 -
LOOP
FETCH cursor_a INTO v_col;
EXIT WHEN cursor_a%NOTFOUND;
INSERT INTO t2 VALUES(v_col);
END LOOP;
CLOSE cursor_a;
END;
CALL pro5();
SELECT * FROM t2;