0

それは簡単に思えますが、私はそれを理解するために何時間も試みましたが、できません..

合体のように機能する db2 関数を作成したいと考えています。

違いは、最初のパラメーターの値が空の文字列である場合に検索されることです。次に、2 番目のパラメーターを使用します。

それが私がしたクエリです

 CREATE FUNCTION COALESCEEMPTY (X1 XML, X2 XML)
 RETURNS XML
 LANGUAGE SQL
 CONTAINS SQL
 NO EXTERNAL ACTION
 DETERMINISTIC
 CASE X1
 WHEN '' THEN RETURN X2;
 ELSE RETURN X1;
 END CASE;

これは、db2 から取得したエラー コードです。

16:09:47  [CREATE - 0 row(s), 0.000 secs]  [Error Code: -104, SQL State: 42601]  DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=X1
 WHEN '' THEN RETURN X2;ERMINISTIC
 CASE;<space>, DRIVER=4.13.127
16:09:47  [ELSE - 0 row(s), 0.000 secs]  [Error Code: -104, SQL State: 42601]  DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=RETURN;ELSE ;JOIN <joined_table>, DRIVER=4.13.127
16:09:47  [END - 0 row(s), 0.000 secs]  [Error Code: -104, SQL State: 42601]  DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=END-OF-STATEMENT;END CASE;JOIN <joined_table>, DRIVER=4.13.127

ご協力いただきありがとうございます。

4

2 に答える 2

0

空の文字列は整形式の XML フラグメントではないため、XML ホスト変数を空の文字列にすることはできません。関数名からわかるように、NULL 値をチェックする場合は、次のようになります。

CASE WHEN X1 IS NULL THEN X2 ELSE X1 END

標準 SQL NULL と空の文字列は別のものです。

于 2013-08-19T17:08:43.333 に答える
0

私は Teradata で SQL UDF を実行するだけですが、DB2 の構文は非常に似ています。これはうまくいくはずです

CREATE FUNCTION COALESCEEMPTY (X1 XML, X2 XML)
RETURNS XML
LANGUAGE SQL
CONTAINS SQL
NO EXTERNAL ACTION
DETERMINISTIC
RETURN 
   CASE WHEN X1 = '' THEN X2 ELSE X1 END;
于 2013-08-19T15:25:53.953 に答える