当前位置: 代码迷 >> Oracle管理 >> SQLPLUS里测试带返回参数的存储过程,该如何处理
  详细解决方案

SQLPLUS里测试带返回参数的存储过程,该如何处理

热度:98   发布时间:2016-04-24 05:50:16.0
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                           TABLET1                             TABLE[TEST@myoracle] SQL>
------解决方案--------------------
sys_refcursor 实质就是 refcursor
所以,你只要定义 refcursor 就可以
你如果 var bb sys_refcursor 这肯定就报错了

探讨

引用:
SQL code


var aa varchar2(2000);
var bb REFCURSOR;
exec p_test(:aa,:bb);
print bb;


var bb REFCURSOR; --我的出参是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 ] ]
  相关解决方案