スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
新しい記事を書く事で広告が消せます。
[DB2]DB2のUDF作成で困ったり困りまくったり
こんにちは、ふぃぶです。
最近はDB2なんぞを扱ってます。
これがまた色々曲者なんですが、今詰まってるのがUDF作成です。
DB2にはUDF(ユーザ定義関数)という機能が付いてます。
TO_DATEとかSUMとかSQL関数を自分で定義できるようなもので
ユーザはこれを定義することによってSQL内で関数として使用できます。
イメージ的にはプロシージャと同じようなもんだと思っていいと思いますよ。
今回扱ってるDB2は9.5。PL/SQLをサポートしていないようなのでOracleのPL/SQLは
そのまま使えなかったり。
※DB2がPL/SQLサポートしだしたのは9.7からっぽい。
のでお作法に習い、以下のようにUDFを定義します。
これで実行するとLIKE文のところでエラーになります。
なんでなんだろう・・・
ちなみにWHERE句の部分を
WHERE CD_VAL LIKE SEARCH_VAL
にしてもエラー。
WHERE CD_VAL LIKE 'AAA'
とかにしたら通る。
WHERE CD_VAL = SEARCH_VAL
にしても通る。
パラメータ変数をLIKEで使えてない感じ?
もう原因がわかんなくて死にそうです・・・。
解決方法求む、次回解決変になるといいな。
でわでわ。
最近はDB2なんぞを扱ってます。
これがまた色々曲者なんですが、今詰まってるのがUDF作成です。
DB2にはUDF(ユーザ定義関数)という機能が付いてます。
TO_DATEとかSUMとかSQL関数を自分で定義できるようなもので
ユーザはこれを定義することによってSQL内で関数として使用できます。
イメージ的にはプロシージャと同じようなもんだと思っていいと思いますよ。
今回扱ってるDB2は9.5。PL/SQLをサポートしていないようなのでOracleのPL/SQLは
そのまま使えなかったり。
※DB2がPL/SQLサポートしだしたのは9.7からっぽい。
のでお作法に習い、以下のようにUDFを定義します。
CREATE FUNCTION GET_CD_VALUE( SEARCH_VAL VARCHAR(100) )
RETRUNS VARCHAR(100)
LANGUAGE SQL
BEGIN ATOMIC
DECLARE ret_string VARCHAR(100) DEFAULT '';
FOR cur AS SELECT CD_NM
FROM MS_CD
WHERE CD_VAL LIKE '%' || SEARCH_VAL || '%'
FETCH FIRST 1 ROW ONLY
DO
SET ret_string = CD_NM;
END FOR
RETURN ret_string;
END
これで実行するとLIKE文のところでエラーになります。
なんでなんだろう・・・
ちなみにWHERE句の部分を
WHERE CD_VAL LIKE SEARCH_VAL
にしてもエラー。
WHERE CD_VAL LIKE 'AAA'
とかにしたら通る。
WHERE CD_VAL = SEARCH_VAL
にしても通る。
パラメータ変数をLIKEで使えてない感じ?
もう原因がわかんなくて死にそうです・・・。
解決方法求む、次回解決変になるといいな。
でわでわ。
コメント
コメントの投稿
« 十分なページ・サイズを持つ SYSTEM TEMPORARY 表スペースが存在しません。 l ホーム l ActiveDirecotyをcsvでエクスポートしたものをそのままインポートするとエラーる話 »