SYS_REFCURSOR作为过程参数的表现是什么
这篇文章主要讲解了“SYS_REFCURSOR作为过程参数的表现是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SYS_REFCURSOR作为过程参数的表现是什么”吧!
我创建了如下的表并填充数据:
CREATETABLEplch_tab(itemVARCHAR2(10))/BEGININSERTINTOplch_tabVALUES('Keyboard');INSERTINTOplch_tabVALUES('Mouse');COMMIT;END;/
然后我创建了这个函数,从游标变量取得一行数据并返回:
CREATEORREPLACEFUNCTIONplch_getitem(plch_curINSYS_REFCURSOR)RETURNplch_tab.item%TYPEISlvretvalplch_tab.item%TYPE;BEGINFETCHplch_curINTOlvretval;RETURNlvretval;ENDplch_getitem;/
现在我需要写一个程序块来获取表里的数据行,并且显示行数和最后一行的项目名称。下面就是这个接近完成的版本:
DECLARElvitemplch_tab.item%TYPE;test_curSYS_REFCURSOR;BEGINOPENtest_curFORSELECT*FROMplch_tabORDERBYitem;/*FETCH*/DBMS_OUTPUT.put_line('Count='||test_cur%ROWCOUNT);DBMS_OUTPUT.put_line('Item='||NVL(lvitem,'NOTSET'));CLOSEtest_cur;END;/
下列的选项中哪些可用来代替 /*FETCH*/ 从而使得这个块执行之后,屏幕上可以见到如下输出?
Count = 2
Item = Mouse
(A)
FETCHtest_curINTOlvitem;lvitem:=plch_getitem(test_cur);
SQL>DECLARE2lvitemplch_tab.item%TYPE;3test_curSYS_REFCURSOR;4BEGIN5OPENtest_curFOR6SELECT*FROMplch_tabORDERBYitem;78FETCHtest_cur9INTOlvitem;10lvitem:=plch_getitem(test_cur);1112DBMS_OUTPUT.put_line('Count='||test_cur%ROWCOUNT);13DBMS_OUTPUT.put_line('Item='||NVL(lvitem,'NOTSET'));1415CLOSEtest_cur;16END;17/Count=2Item=MousePL/SQLproceduresuccessfullycompletedSQL>
(B)
lvitem:=plch_getitem(test_cur);lvitem:=plch_getitem(test_cur);
SQL>DECLARE2lvitemplch_tab.item%TYPE;3test_curSYS_REFCURSOR;4BEGIN5OPENtest_curFOR6SELECT*FROMplch_tabORDERBYitem;78lvitem:=plch_getitem(test_cur);9lvitem:=plch_getitem(test_cur);1011DBMS_OUTPUT.put_line('Count='||test_cur%ROWCOUNT);12DBMS_OUTPUT.put_line('Item='||NVL(lvitem,'NOTSET'));1314CLOSEtest_cur;15END;16/Count=2Item=MousePL/SQLproceduresuccessfullycompletedSQL>
(C)
lvitem:=plch_getitem(test_cur);FETCHtest_curINTOlvitem;
SQL>DECLARE2lvitemplch_tab.item%TYPE;3test_curSYS_REFCURSOR;4BEGIN5OPENtest_curFOR6SELECT*FROMplch_tabORDERBYitem;78lvitem:=plch_getitem(test_cur);9FETCHtest_cur10INTOlvitem;1112DBMS_OUTPUT.put_line('Count='||test_cur%ROWCOUNT);13DBMS_OUTPUT.put_line('Item='||NVL(lvitem,'NOTSET'));1415CLOSEtest_cur;16END;17/Count=2Item=MousePL/SQLproceduresuccessfullycompletedSQL>
(D)
lvitem:=plch_getitem(test_cur);FETCHplch_curINTOlvitem;
SQL>DECLARE2lvitemplch_tab.item%TYPE;3test_curSYS_REFCURSOR;4BEGIN5OPENtest_curFOR6SELECT*FROMplch_tabORDERBYitem;78lvitem:=plch_getitem(test_cur);9FETCHplch_cur10INTOlvitem;1112DBMS_OUTPUT.put_line('Count='||test_cur%ROWCOUNT);13DBMS_OUTPUT.put_line('Item='||NVL(lvitem,'NOTSET'));1415CLOSEtest_cur;16END;17/DECLARElvitemplch_tab.item%TYPE;test_curSYS_REFCURSOR;BEGINOPENtest_curFORSELECT*FROMplch_tabORDERBYitem;lvitem:=plch_getitem(test_cur);FETCHplch_curINTOlvitem;DBMS_OUTPUT.put_line('Count='||test_cur%ROWCOUNT);DBMS_OUTPUT.put_line('Item='||NVL(lvitem,'NOTSET'));CLOSEtest_cur;END;ORA-06550:第9行,第9列:PLS-00201:必须声明标识符'PLCH_CUR'ORA-06550:第9行,第3列:PL/SQL:SQLStatementignoredSQL>
答案ABC.答案D错误因为plch_cur这个名称在函数之外是不可见的。REFCURSOR作为IN参数(不需要定义为INOUT),在FETCH之后游标仍然会前移,所以你调用之后再FETCH会取到下一行。
感谢各位的阅读,以上就是“SYS_REFCURSOR作为过程参数的表现是什么”的内容了,经过本文的学习后,相信大家对SYS_REFCURSOR作为过程参数的表现是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。