1

DB2(バージョン6.01)で次のように関数を作成します。

CREATE FUNCTION myschema.test_c_c(param CHAR(1)) RETURNS CHAR(1) RETURN param;

成功のメッセージが表示され、「SystemiNavigator」がmyschemaの下でその機能を表示します。しかし、この関数をこのように呼び出そうとすると、次のようになります。

SELECT myschema.test_c_c('X') FROM SYSIBM.SYSDUMMY1;

次のメッセージが表示されます。

[SQL0204] TEST_C_C der Art *N in myschema nicht gefunden. 
[SQL State=42704, DB Errorcode=-204] 

「nichtgefunden」は「見つかりません」と同じです。

エラーコード-204の説明(その一部、完全なエラーコードの説明はこちら

「名前で識別されるオブジェクトは、DB2®サブシステムで定義されていません。」

そして最後に、INTパラメータを使用するとすべて正常に機能します。

CREATE FUNCTION myschema.test_i_ri(param INT) RETURNS INT RETURN param;
SELECT myschema.test_i_ri(4711) FROM SYSIBM.SYSDUMMY1;
CREATE FUNCTION myschema.test_ii_ri(param1 INT, param2 INT) RETURNS INT RETURN param1 +param2;
SELECT myschema.test_ii_ri(800, 15) FROM SYSIBM.SYSDUMMY1;

私はどこでポイントを逃しますか?

私はSQLWorkbench / Jですべてのstatmentensを実行します(これは非常に便利です)

4

1 に答える 1

4

何時間もの試行錯誤と調査の後、私は質問をし、30分後に自分で答えを見つけました.

問題は、DB2 でのオーバーロードされた関数の解決です。通話時

SELECT myschema.test_c_c('X') FROM SYSIBM.SYSDUMMY1;

このように、DB2 は 'X' を VARCHAR として解釈しますが、VARCHAR パラメータを持つ test_c_c のバージョンはありません。仕事とは

SELECT CESDTA.TEST_C_C(CAST('X' AS CHAR(1))) FROM SYSIBM.SYSDUMMY1;

または、VARCHAR 関数を宣言します。

CREATE FUNCTION cesdta.test_v_v(param VARCHAR(1)) RETURNS VARCHAR(1000) RETURN param;
SELECT cesdta.test_v_v('X') FROM SYSIBM.SYSDUMMY1;
于 2012-11-16T10:38:34.070 に答える