Что передать в качестве аргумента SYS_REFCURSOR - PullRequest
1 голос
/ 28 ноября 2011

Здесь у меня есть хранимая процедура в Oracle:

CREATE OR REPLACE PROCEDURE StP_COMPS
IS
 CV_1 SYS_REFCURSOR;
BEGIN
 OPEN CV_1  FOR SELECT * FROM COMPUTERS;
END;

Когда я выполняю процедуру наподобие EXEC SP_COMPS, я не получаю ошибки, SQL-разработчик просто показывает «анонимный блок завершен».Затем я изменяю процедуру на

CREATE OR REPLACE PROCEDURE SP_COMPS
      (cv_1 OUT SYS_REFCURSOR)
IS
BEGIN
 OPEN CV_1  FOR SELECT * FROM COMPUTERS;
END;

и при выполнении я получаю сообщение об ошибке, указывающее, что число типов аргументов неверно.Мне очень любопытно, что я мог бы отправить в качестве аргумента процедуры, если это просто выходной параметр.Я хочу получить набор результатов запроса внутри процедуры.Что я здесь не так делаю?

PS Когда я пытаюсь запустить процедуру, щелкнув правой кнопкой мыши по этой процедуре и выбрав Выполнить, я получаю:

 DECLARE
  CV_2 sys_refcursor;
 BEGIN

 SP_COMPS(
    CV_2 => CV_2
    );

 :CV_2 := CV_2; -- <--Can't understand this part
 END;

1 Ответ

1 голос
/ 28 ноября 2011

У вас есть переменная, вы должны выполнить процедуру как:

DECLARE
  CV_1 SYS_REFCURSOR;
BEGIN
  SP_COMPS(CV_1);
  --use cv_1
END;

ОБНОВЛЕНИЕ (после обновления OP): это простой шаблон для тестирования. Как объясняется здесь: Самый простой метод для проверки хранимой процедуры Oracle , просто запустите этот код и выберите ref_cursor в качестве типа переменной cv2.

...