вот рабочий пример, объявите refcursor, затем присвойте значение, вызвав ваш proc в анонимном блоке.
затем вы печатаете его
var x REFCURSOR ;
declare
/*a no cleanup procedure*/
procedure GetMeMyRefCursor(outter out nocopy sys_refcursor)
as
begin
open outter for
select level
from dual
connect by level <= 5;
end GetMeMyRefCursor;
begin
GetMeMyRefCursor(:x);
/*note you pass in the refcursor you created via the :X*/
end ;
/
print x;
/*now print it*/
/*LEVEL
----------------------
1
2
3
4
5*/
на основании комментария:
Теперь, используя ваш комментарий, у вас возникла проблема с параметрами IN / OUT, а не с печатью (не прочитал заголовок только вопрос и другой ответ)
это работает: (на основе вашего кода)
create or replace
PROCEDURE GET_PROJECT_DRF_HISTORY
( projectId IN NUMBER,
resultset_out OUT sys_refcursor
) AS
BEGIN
OPEN resultset_out for
SELECT level from dual connect by level <= projectId;
/* DBMS_OUTPUT.PUT_LINE(resultset_out);*/
END GET_PROJECT_DRF_HISTORY;
/
var results REFCURSOR;
--this needs to be REFCURSOR (at least in 10g and 11i)
exec GET_PROJECT_DRF_HISTORY(5, :results);
print results;
/
Вы также можете отлаживать пакеты и процедуры непосредственно из SQL Developer (это может быть реальным спасением жизни)
если вы хотите отлаживать в SQL Developer, это действительно просто:
в соединениях -> ваша схема здесь -> процедуры -> GET_PROJECT_DRF_HISTORY, щелкните правой кнопкой мыши и выберите «Скомпилировать для отладки». Затем в процедуре установите точку останова, затем щелкните правой кнопкой мыши и отладьте ее (это создаст анонимный блок - см. Ниже - где вы можете указать свои значения и т. Д.)
DECLARE
PROJECTID NUMBER;
RESULTSET_OUT sys_refcursor;
BEGIN
PROJECTID := NULL;
GET_PROJECT_DRF_HISTORY(
PROJECTID => PROJECTID,
RESULTSET_OUT => RESULTSET_OUT
);
-- Modify the code to output the variable
-- DBMS_OUTPUT.PUT_LINE('RESULTSET_OUT = ' || RESULTSET_OUT);
END;
(http://www.oracle.com/technetwork/developer-tools/sql-developer/sqldeveloperwhitepaper-v151-130908.pdf стр. 11)
в противном случае ошибка не будет выглядеть так, как должна выглядеть, если вы делаете все это из Developer.
Но я действительно думаю, что ваш VAR неверен и, следовательно, его не существует!
variable results sys_refcursor;
Usage: 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 ] ]
Итак, исходя из моего первоначального примера "var x REFCURSOR;" должно работать