私は SQuirreL SQL を SQL クエリ ツールとしてとても気に入っていますが、AS/400 DB2 データベースのストアド プロシージャを呼び出すことができませんでした。「設定または登録されたパラメーター値の数がパラメーターの数と一致しません」というエラーが常に表示されます。パラメータの数を再確認しましたが、うまくいきませんでした。これは、1 つの IN と 1 つの OUT を受け取るプロシージャで試した構文です。
SOMESPROC(12345, ?) を呼び出します。
私は SQuirreL SQL を SQL クエリ ツールとしてとても気に入っていますが、AS/400 DB2 データベースのストアド プロシージャを呼び出すことができませんでした。「設定または登録されたパラメーター値の数がパラメーターの数と一致しません」というエラーが常に表示されます。パラメータの数を再確認しましたが、うまくいきませんでした。これは、1 つの IN と 1 つの OUT を受け取るプロシージャで試した構文です。
SOMESPROC(12345, ?) を呼び出します。
Squirrel では、このようなものを使用できます。宣言された変数の型が、ストアド プロシージャの out パラメーターの型と一致することを確認する必要があります。
BEGIN
DECLARE outParam INT;
STORED_PROC_NAME(outParam);
END
手順に入力を提供する必要がある場合は、これを行うことができます。
BEGIN
DECLARE outParam INT;
STORED_PROC_NAME('input', outParam);
END
また、ステートメント区切り文字を 以外のものに変更する必要があります;
。そうしないと、ステートメントが分割され、各部分を個別に送信しようとします。
DbVisualizer のプロ バージョンでは、SQL コマンダー メニュー オプションの [SQL でパラメーター マーカーを処理] を有効にすると、"?" が許可されます。パラメータ
call SOMESPROC(12345, ?);
区切り文字を変更すると (上記のように)、これは 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 開発者
ある場合、呼び出しは次のようになるはずです。
CALL SomeSProc(12345)
結果を得るには、次のことを試してください。
SELECT * FROM SomeSProc(12345)
これは、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()@
squirrel > session > session properties > SQL : '#' でステートメント区切り文字を変更します。
BEGIN
DECLARE inOutParam varchar(200);
set inOutParam = 'a value';
STORED_PROC_NAME(outParam);
END;
#