6

私は SQuirreL SQL を SQL クエリ ツールとしてとても気に入っていますが、AS/400 DB2 データベースのストアド プロシージャを呼び出すことができませんでした。「設定または登録されたパラメーター値の数がパラメーターの数と一致しません」というエラーが常に表示されます。パラメータの数を再確認しましたが、うまくいきませんでした。これは、1 つの IN と 1 つの OUT を受け取るプロシージャで試した構文です。

SOMESPROC(12345, ?) を呼び出します。

4

7 に答える 7

3

Squirrel では、このようなものを使用できます。宣言された変数の型が、ストアド プロシージャの out パラメーターの型と一致することを確認する必要があります。

BEGIN
    DECLARE outParam INT;
    STORED_PROC_NAME(outParam);
END

手順に入力を提供する必要がある場合は、これを行うことができます。

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

また、ステートメント区切り文字を 以外のものに変更する必要があります;。そうしないと、ステートメントが分割され、各部分を個別に送信しようとします。

于 2012-07-17T19:12:59.630 に答える
2

DbVisualizer のプロ バージョンでは、SQL コマンダー メニュー オプションの [SQL でパラメーター マーカーを処理] を有効にすると、"?" が許可されます。パラメータ

call SOMESPROC(12345, ?);
于 2014-11-22T19:56:57.030 に答える
0

区切り文字を変更すると (上記のように)、これは Squirrel で機能します。ただし、変数が何であるかを確認するには、次のことを行う必要があります...

私の例では、区切り文字をチルディ (~) に設定します。最後の「end」の後、「select」の前に含めます。コードはここから始まります...

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 開発者

于 2016-09-13T21:51:06.087 に答える
0

ある場合、呼び出しは次のようになるはずです。

CALL SomeSProc(12345)

結果を得るには、次のことを試してください。

SELECT * FROM SomeSProc(12345)
于 2011-02-18T15:04:13.940 に答える
0

これは、db2 ストアド プロシージャを使用して Squirrel 3.7 で動作するテスト済みの例です。秘訣は、移行ストアド プロシージャ MY_PROC_TEST を渡して、実際のストアド プロシージャ PROC_TEST を呼び出すことです。

squirrel > session > session properties > 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 @

次に、次のように sored プロシージャを呼び出すことができます。

CALL MY_PROC_TEST()@

于 2016-03-15T09:05:33.567 に答える
-2

squirrel > session > session properties > SQL : '#' でステートメント区切り文字を変更します。

BEGIN
    DECLARE inOutParam varchar(200);
    set inOutParam =  'a value';
    STORED_PROC_NAME(outParam);
END;
#
于 2014-07-02T14:08:12.050 に答える