Процедура, не запущенная в жабе, запрашивающей переменную - PullRequest
0 голосов
/ 10 апреля 2019

Я использую TOAD для Oracle.Я пытаюсь выполнить хранимую процедуру с двумя параметрами - один IN и один OUT.Это выглядит так:

PROCEDURE get_stuff (parm_1 IN VARCHAR2, parm_2 OUT currefcursor)

В окне редактора SQL в TOAD я пробовал разные вещи безрезультатно.Я уверен, что это что-то простое, что я упускаю, потому что я пробовал все виды вещей, которые я видел в других решениях здесь, в Experts Exchange, но не могу избежать различных ошибок.Вот что я думаю должно работать из того, что я видел здесь:

 var p1 VARCHAR2 := 'some text';
 var p2 currefcursor;

 EXEC get_stuff( :p1, :p2 );

Однако, когда я запускаю это, редактор SQL выскакивает окно под названием «Переменные», которое, кажется, ищет значение.Независимо от того, помещаю ли я что-то в текстовое поле «Значение» или нет, когда я нажимаю «ОК», оно говорит:

ORA-00900: invalid SQL statement

и выделяет «var» перед p1.

Пожалуйста,скажи мне, что мне не хватает!Статус Решен Приоритет Средний Безопасность Общественное мнение 21999

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Вы можете использовать Жабу, чтобы выполнить без написания жгута для выполнения. Вот один из методов с использованием браузера схемы. Выберите свой объект и щелкните правой кнопкой мыши> Выполнить.

enter image description here

Вам предлагается диалоговое окно с запросом ваших входных параметров. Установите ваши входы, и вы можете увидеть сгенерированный жгут выполнения ниже. Вы также можете использовать этот сгенерированный код в качестве учебного пособия, чтобы увидеть один метод написания кода самостоятельно.

enter image description here

Нажмите OK, и ваша функция / процедура будет выполнена, и результаты будут показаны.

enter image description here

0 голосов
/ 10 апреля 2019

Поскольку вторым параметром является OUT, вы должны объявить переменную, которая примет это значение. Вот как; Я не знаю, что такое currefcursor тип - наверное, вы знаете.

declare
  l_out currefcursor;
begin
  get_stuff(:p1, l_out);
end;
/

Простой вариант просмотра результата будет следующим: поместите этот код в редактор и запустите его как скрипт; результат будет отображаться на вкладке «Вывод скрипта».

variable l_out currefcursor
exec get_stuff(:p1, :l_out);
print l_out

Или вы можете даже создать функцию wrapper , которая возвращает курсор , а затем выбрать из нее:

create or replace function f_get_stuff(p1 in number) 
  return currefcursor
is
  l_out currefcursor;
begin
  get_stuff(p1, l_out);
  return l_out;
end;
/

select f_get_stuff(:p1) from dual; 
...