Вызов хранимой процедуры Oracle без аргументов - PullRequest
2 голосов
/ 19 июля 2011

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

PLS-00306: wrong number or types of arguments in call to 'MY_PROC'

Чтобы вызвать процедуру, я просто ввожу в TOra следующий текст:

BEGIN
 SCHEMA.MY_PROC();
END;

Я тоже пробовал (хотя та же ошибка)

EXEC  SCHEMA.MY_PROC();

Я знаком с MSSQL и могу без проблем выполнить SP, используя SQL-сервер, но не могу понять, как сделать то же самое с Oracle. Я не могу просмотреть реальный код для хранимой процедуры, но из имеющейся у меня ограниченной документации кажется, что она не принимает никаких входных параметров, а возвращаемое значение - это курсор ref. У меня такое чувство, что мне нужно как-то передать курсор ref, но все, что я пробовал в этом отношении, не сработало.

Я просто хочу просмотреть результаты SP, как если бы я сделал оператор SELECT, то есть записи, заполняющие сетку данных на панели результатов в интерфейсе TOra.

1 Ответ

4 голосов
/ 19 июля 2011

Похоже, что процедура имеет параметр OUT (в Oracle процедуры ничего не возвращают, но могут иметь параметры OUT и IN OUT, функции возвращают что-то). Таким образом, вы должны передать переменную для этого параметра OUT. Что-то вроде

DECLARE
  l_results SYS_REFCURSOR;
BEGIN
  schema.my_proc( l_results );
END;

должен успешно вызвать процедуру. Но тогда вы хотите, чтобы ваш графический интерфейс отображал результаты этого курсора. Это, к сожалению, становится немного сложнее, потому что теперь вы говорите о специфической для GUI проблеме.

Я не использую TOra, поэтому я не знаю, что вам нужно делать в TOra, чтобы отобразить курсор. В SQL * Plus (или SQL Developer, бесплатном графическом интерфейсе Oracle) вы можете сделать что-то вроде

create or replace procedure my_proc( p_rc OUT SYS_REFCURSOR )
as
begin
  open p_rc
   for select 1 col1
         from dual;
end;
/

variable rc refcursor;
exec my_proc( :rc );
print rc;

Это создает хранимую процедуру с параметром OUT, который является курсором, объявляет переменную хоста, которую можно передать, и затем печатает результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...