2011-10-19 对REF CURSOR 的理解
发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,http://www.itpub.net/thread-1499223-7-1.html64楼我创建了这张表并填入了数据:CREATE TABLE plch_employees( employee
千家信息网最后更新 2025年02月06日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安全错误
数据库的锁怎样保障安全
陕西铭尚宇网络技术
数据库class是什么类型
数据库灰度方案
b250主板能做无盘服务器么
数据库数据直接用sql删除
初中毕业学习网络安全辛苦吗
科技互联网书籍免费
医保医用耗材分类与代码数据库官网
增值税发票税控器连接服务器失败
那种技术实现数据库完整性
服务器一直网关超时怎么办
互联网软件开发工程师薪酬水平
SDN网络技术挑战赛
现在网络技术如此发达英语
怎么让别人访问sql数据库
网络安全教育备课稿
对日软件开发 日语
怎么使用服务器处理大数据
软件开发初级教程都有哪些
如何把东西存到服务器里边
数据库的服务器名怎么看
搭建数据库教程视频教程
企业网络安全系统建设方案
那种技术实现数据库完整性
传达落实网络安全防护
手游服务器数据被删除
软件开发程序有什么用
手机网络安全模式
北京浪潮服务器虚拟化操作云主机
CMMI软件开发规范