7 Stimmen

Wie kann ich eine DB2 Stored Procedure mit OUT-Parametern aus SQuirreL SQL aufrufen?

Ich mag SQuirreL SQL wirklich als SQL-Abfragetool, aber ich konnte es nie dazu bringen, gespeicherte Prozeduren in unserer AS/400 DB2-Datenbank aufzurufen. Ich erhalte immer die Fehlermeldung "Die Anzahl der gesetzten oder registrierten Parameterwerte stimmt nicht mit der Anzahl der Parameter überein." Ich habe die Anzahl der Parameter doppelt geprüft und hatte kein Glück. Dies ist die Syntax, die ich für eine Prozedur ausprobiert habe, die ein IN und ein OUT benötigt:

SOMESPROC(12345, ?) aufrufen;

0voto

ratm Punkte 895

Hier ist ein getestetes Beispiel, das auf Squirrel 3.7 mit einer db2 Stored Procedure funktioniert. Der Trick besteht darin, mit einer Übergangs-Stored-Procedure MY_PROC_TEST die echte Stored-Procedure PROC_TEST aufzurufen.

Anweisungstrennzeichen in Squirrel > Sitzung > Sitzungseigenschaften > SQL ändern: @

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 @

Dann können Sie die gesicherte Prozedur wie folgt aufrufen:

MY_PROC_TEST()@ AUFRUFEN

0voto

user6828436 Punkte 1

Dies funktioniert in Squirrel, wenn Sie das Begrenzungszeichen (wie oben angegeben) ändern. Um jedoch zu sehen, was die Variable ist, müssen Sie Folgendes tun...

In meinem Beispiel setze ich das Trennzeichen auf ein Tildezeichen (~). Nach dem letzten "end" einfügen, vor "select". Der Code beginnt hier...

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-Entwickler

-2voto

Dimitri Punkte 1

Anweisungstrennzeichen in Squirrel > Sitzung > Sitzungseigenschaften > SQL ändern : '#'

BEGIN
    DECLARE inOutParam varchar(200);
    set inOutParam =  'a value';
    STORED_PROC_NAME(outParam);
END;
#

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X