2011-10-19 对REF CURSOR 的理解
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,http://www.itpub.net/thread-1499223-7-1.html64楼我创建了这张表并填入了数据:CREATE TABLE plch_employees( employee
千家信息网最后更新 2026年11月03日2011-10-19 对REF CURSOR 的理解
http://www.itpub.net/thread-1499223-7-1.html
64楼
我创建了这张表并填入了数据:
CREATE TABLE plch_employees( employee_id INTEGER, last_name VARCHAR2 (100), salary NUMBER)/ BEGIN INSERT INTO plch_employees VALUES (100, 'Ellison', 1000000); INSERT INTO plch_employees VALUES (200, 'Gates', 1000000); INSERT INTO plch_employees VALUES (300, 'Zuckerberg', 1000000); COMMIT;END;/
然后我写了这个块:
DECLARE c1 SYS_REFCURSOR; c2 SYS_REFCURSOR; l_id plch_employees.employee_id%TYPE;BEGIN OPEN c1 FOR SELECT employee_id FROM plch_employees ORDER BY last_name; /*FINISH*/EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line ('ERROR');END;/下列的选项中哪些可用来代替上文的 /*FINISH*/, 从而使得这个块执行之后会显示下列三行:
100
200
300
(A)
FETCH c1 INTO l_id;DBMS_OUTPUT.put_line (l_id);c2 := c1;FETCH c2 INTO l_id;DBMS_OUTPUT.put_line (l_id);CLOSE c1;FETCH c2 INTO l_id;DBMS_OUTPUT.put_line (l_id);
SQL> DECLARE 2 c1 SYS_REFCURSOR; 3 c2 SYS_REFCURSOR; 4 l_id plch_employees.employee_id%TYPE; 5 BEGIN 6 OPEN c1 FOR 7 SELECT employee_id FROM plch_employees ORDER BY last_name; 8 9 FETCH c1 10 INTO l_id; 11 DBMS_OUTPUT.put_line(l_id); 12 13 c2 := c1; 14 15 FETCH c2 16 INTO l_id; 17 DBMS_OUTPUT.put_line(l_id); 18 19 CLOSE c1; 20 21 FETCH c2 22 INTO l_id; 23 DBMS_OUTPUT.put_line(l_id); 24 25 EXCEPTION 26 WHEN OTHERS THEN 27 DBMS_OUTPUT.put_line('ERROR'); 28 END; 29 /100200ERRORPL/SQL procedure successfully completedSQL>(B)
FETCH c1 INTO l_id;DBMS_OUTPUT.put_line (l_id);c2 := c1;FETCH c2 INTO l_id;DBMS_OUTPUT.put_line (l_id);CLOSE c2;FETCH c1 INTO l_id;DBMS_OUTPUT.put_line (l_id);
SQL> DECLARE 2 c1 SYS_REFCURSOR; 3 c2 SYS_REFCURSOR; 4 l_id plch_employees.employee_id%TYPE; 5 BEGIN 6 OPEN c1 FOR 7 SELECT employee_id FROM plch_employees ORDER BY last_name; 8 9 FETCH c1 10 INTO l_id; 11 DBMS_OUTPUT.put_line(l_id); 12 13 c2 := c1; 14 15 FETCH c2 16 INTO l_id; 17 DBMS_OUTPUT.put_line(l_id); 18 19 CLOSE c2; 20 21 FETCH c1 22 INTO l_id; 23 DBMS_OUTPUT.put_line(l_id); 24 25 EXCEPTION 26 WHEN OTHERS THEN 27 DBMS_OUTPUT.put_line('ERROR'); 28 END; 29 /100200ERRORPL/SQL procedure successfully completedSQL>(C)
FETCH c1 INTO l_id;DBMS_OUTPUT.put_line (l_id);c2 := c1;FETCH c2 INTO l_id;DBMS_OUTPUT.put_line (l_id);FETCH c1 INTO l_id;DBMS_OUTPUT.put_line (l_id);CLOSE c1;CLOSE c2;
SQL> DECLARE 2 c1 SYS_REFCURSOR; 3 c2 SYS_REFCURSOR; 4 l_id plch_employees.employee_id%TYPE; 5 BEGIN 6 OPEN c1 FOR 7 SELECT employee_id FROM plch_employees ORDER BY last_name; 8 9 FETCH c1 10 INTO l_id; 11 DBMS_OUTPUT.put_line(l_id); 12 13 c2 := c1; 14 15 FETCH c2 16 INTO l_id; 17 DBMS_OUTPUT.put_line(l_id); 18 19 FETCH c1 20 INTO l_id; 21 DBMS_OUTPUT.put_line(l_id); 22 23 CLOSE c1; 24 CLOSE c2; 25 26 EXCEPTION 27 WHEN OTHERS THEN 28 DBMS_OUTPUT.put_line('ERROR'); 29 END; 30 /100200300ERRORPL/SQL procedure successfully completedSQL>(D)
FETCH c1 INTO l_id;DBMS_OUTPUT.put_line (l_id);c2 := c1;FETCH c2 INTO l_id;DBMS_OUTPUT.put_line (l_id);FETCH c1 INTO l_id;DBMS_OUTPUT.put_line (l_id);CLOSE c1;
SQL> DECLARE 2 c1 SYS_REFCURSOR; 3 c2 SYS_REFCURSOR; 4 l_id plch_employees.employee_id%TYPE; 5 BEGIN 6 OPEN c1 FOR 7 SELECT employee_id FROM plch_employees ORDER BY last_name; 8 9 FETCH c1 10 INTO l_id; 11 DBMS_OUTPUT.put_line(l_id); 12 13 c2 := c1; 14 15 FETCH c2 16 INTO l_id; 17 DBMS_OUTPUT.put_line(l_id); 18 19 FETCH c1 20 INTO l_id; 21 DBMS_OUTPUT.put_line(l_id); 22 23 CLOSE c1; 24 25 EXCEPTION 26 WHEN OTHERS THEN 27 DBMS_OUTPUT.put_line('ERROR'); 28 END; 29 /100200300PL/SQL procedure successfully completedSQL>答案D
答案说明65楼
2011-10-19 答案:D(A)这个选项的结果是:100200ERROR这是因为我关闭C1之后,C2也会被关闭,所以第三个FETCH会抛出"ORA-01001: invalid cursor"异常。(B)同上,只要C1,C2其中一个被关闭,另一个就相应被关闭。(C)这个选项的结果是:100200300ERROR既然我在三个FETCH结束前没有关闭游标,我就能看到100-300。但是随后我关闭了C1, 而且还试图关闭C2。C1一旦被关闭,C2也自动被关闭,因此假如试图再关闭C2就会报"ORA-01001: invalid cursor"错误。(D)正确
答案
三个
结果
上文
数据
游标
这是
错误
三行
会报
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技
互联网加科技
互联网科技公司排名
互联网科技活动banner
科技金融是不是互联网金融
科技企业和互联网企业
重庆互联网络科技
奇酷互联网络科技
广州紫鲸互联网科技
互联网前沿科技
佰商互联网科技有限公司
互联网 科技服务平台
美国互联网前沿科技
蓝色互联网科技
互联网科技公司的市场部门
互联网为啥属于高科技
洛阳昕诺飞互联网科技有限公司
恒生互联网科技业指数调整周期
容联科技互联网电商
互联网科技对化妆品行业
互联网络科技有限公司
致骋互联网科技
极限挑战互联网科技
电子科技大学互联网
融势互联网科技
苏州大垚互联网科技
金融科技和互联网金融
中国互联网公司的科技投入
互联网高科技绘画
小牛互联网科技有限公司地址