SQLPLUS里测试带返回参数的存储过程
过程名p_test
入参 aa varchar2
出参 bb sys_refcursor
在SQLPLUS里如何将sys_refcursor 这个结果集获取出来呢
------解决方案--------------------
- SQL code
--你试过么,就说定义不了。
[TEST@myoracle] SQL>create or replace procedure my_proc( 2 i_aa varchar2, 3 o_cursor out sys_refcursor 4 ) 5 as 6 begin 7 open o_cursor for 8 select * from tab where 1=i_aa; 9 end; 10 / 过程已创建。 [TEST@myoracle] SQL>var aa varchar2(2000); [TEST@myoracle] SQL>var bb refcursor; [TEST@myoracle] SQL>begin :aa := 1; end; 2 / PL/SQL 过程已成功完成。 [TEST@myoracle] SQL>exec my_proc(:aa,:bb); PL/SQL 过程已成功完成。 [TEST@myoracle] SQL>print :bb; TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- TEST TABLE T1 TABLE [TEST@myoracle] SQL>
------解决方案--------------------
sys_refcursor 实质就是 refcursor
所以,你只要定义 refcursor 就可以
你如果 var bb sys_refcursor 这肯定就报错了
------解决方案--------------------
pl/sql 是定义不了refcursor的
但在sqlplus里完全可以
var aa varchar2(2000);
var bb REFCURSOR;
exec p_test(:aa,:bb);
print bb;
另sqlplus里,
var bb sys_refcursor;
显示:用法: VAR[IABLE] [ <variable> [ NUMBER | CHAR | CHAR (n [CHAR|BYTE]) |
VARCHAR2 (n [CHAR|BYTE]) | NCHAR | NCHAR (n) |
NVARCHAR2 (n) | CLOB | NCLOB | REFCURSOR |
BINARY_FLOAT | BINARY_DOUBLE ] ]