(原发表于2010-10-13)
最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。
以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808
原始出处:
http://www.plsqlchallenge.com/
作者:Steven Feuerstein
运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品
我创建了一张表并填充数据,让后创建了一个函数来从这张表中读取数据:
CREATE TABLE plch_parts
(
partnum INTEGER
, partname VARCHAR2 (100)
)
/
BEGIN
INSERT INTO plch_parts
VALUES (1, 'Mouse');
INSERT INTO plch_parts
VALUES (100, 'Keyboard');
INSERT INTO plch_parts
VALUES (500, 'Monitor');
COMMIT;
END;
/
CREATE OR REPLACE FUNCTION parts_data (name_like_in IN VARCHAR2)
RETURN SYS_REFCURSOR
IS
l_return SYS_REFCURSOR;
BEGIN
OPEN l_return FOR
SELECT *
FROM plch_parts
WHERE partname LIKE name_like_in
ORDER BY partname;
RETURN l_return;
END parts_data;
/
I then write the following block:
DECLARE
l_data SYS_REFCURSOR;
l_row plch_parts%ROWTYPE;
BEGIN
/*OPEN*/
LOOP
FETCH l_data INTO l_row;
EXIT WHEN l_data%NOTFOUND;
DBMS_OUTPUT.put_line (l_row.partname);
END LOOP;
END;
/
下列哪些选项可用来取代/*OPEN*/注释,使得代码块执行之后会显示如下两行文本?
Monitor
Mouse
(A)
l_data := parts_data ('M%');
(B)
OPEN l_data FOR
SELECT *
FROM plch_parts
WHERE partname LIKE 'M%'
ORDER BY partname;
(C)
OPEN l_data FOR parts_data ('M%');
(D)
l_data := parts_data ('M%');
OPEN l_data;