Как я могу вызвать хранимую процедуру DB2 с параметрами OUT из SQuirreL SQL? - PullRequest
5 голосов
/ 16 февраля 2011

Мне действительно нравится SQuirreL SQL как инструмент SQL-запросов, но мне никогда не удавалось заставить его вызывать хранимые процедуры в нашей базе данных DB2 AS / 400.Я всегда получаю сообщение об ошибке «Количество установленных или зарегистрированных значений параметров не соответствует количеству параметров».Я дважды проверил количество параметров и мне не повезло.Это синтаксис, который я пробовал для процедуры, которая принимает один IN и один OUT:

call SOMESPROC (12345,?);

Ответы [ 7 ]

6 голосов
/ 17 августа 2016

Похоже, что SQuirrel в настоящее время не в состоянии сделать это в AS / 400 DB2.

Использование открытого источника SQL Workbench / J (http://www.sql -workbench.net / ) Мне удалось вызвать процедуру:

wbcall SOMESPROC(12345, ?);

У нее есть собственная команда для вызова процедуры "wbcall".Использовать?для параметров out.

Примечание. При установке SQL Workbench / J обязательно загрузите нужный драйвер DB2 с IBM , а также добавьте файл лицензии при добавлении драйвера в SQL Workbench / J.

3 голосов
/ 17 июля 2012

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

BEGIN
    DECLARE outParam INT;
    STORED_PROC_NAME(outParam);
END

Если вам также необходимо предоставить данные для процедуры, вы можете сделать это.

BEGIN
    DECLARE outParam INT;
    STORED_PROC_NAME('input', outParam);
END

Вам также необходимо изменить разделитель операторов на что-то отличное от ;. В противном случае он разобьет заявление и попытается отправить каждую часть в отдельности.

2 голосов
/ 22 ноября 2014

В профессиональной версии DbVisualizer с включенной опцией «Маркеры параметров процесса в SQL» в пункте меню SQL Commander будет разрешено «?» пары

call SOMESPROC(12345, ?);
0 голосов
/ 14 сентября 2016

Это будет работать в Squirrel, если вы измените разделитель (как указано выше).Однако, чтобы увидеть, что это за переменная, вам нужно сделать следующее ...

В моем примере я установлю разделитель на тильды (~).Включить после последнего «конца», перед «выбрать».Код начинается здесь ...

begin
declare inoutParm numeric(2,0);
call spMyStoredProcedure(
             1234567                                     
           , inoutParm                                           
       );
declare global temporary table session.myTempTbl  
       (MyResult   char(1024) )                                         
with replace ;
insert into session.myTempTbl
  (myResult)
   values(inoutParm) ;  
end
~
select myResult from session.myTempTbl

Mic Keeley as400 (db2) SQL Developer

0 голосов
/ 15 марта 2016

Вот протестированный пример, который работает на Squirrel 3.7 с хранимой процедурой db2. Хитрость заключается в том, чтобы переходить к временной хранимой процедуре MY_PROC_TEST для вызова реальной хранимой процедуры PROC_TEST.

изменить разделитель операторов в белке> сеанс> свойства сеанса> SQL: @

DROP PROCEDURE MY_PROC_TEST()@
CREATE PROCEDURE MY_PROC_TEST()
RESULT SETS 1 -- out resultset (call product)
LANGUAGE SQL
BEGIN
  DECLARE flag SMALLINT; -- out parameter
  CALL MY_PROC('2015', flag);
END @
CALL MY_PROC_TEST()@
END @

Тогда вы можете вызвать процедуру с набитым голосом так:

CALL MY_PROC_TEST () @

0 голосов
/ 02 июля 2014

изменить разделитель операторов в белке> сеанс> свойства сеанса> SQL: '#'

BEGIN
    DECLARE inOutParam varchar(200);
    set inOutParam =  'a value';
    STORED_PROC_NAME(outParam);
END;
#
0 голосов
/ 18 февраля 2011

Я думаю, что если он есть, вызов должен быть:

CALL SomeSProc(12345)

, чтобы получить результат, возможно, попробуйте:

SELECT * FROM SomeSProc(12345)
...