2ntブログ

スポンサーサイト

上記の広告は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を定義します。



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で使えてない感じ?
もう原因がわかんなくて死にそうです・・・。

解決方法求む、次回解決変になるといいな。
でわでわ。