• 締切済み

db2 create functionでエラー

aix version5 + db2 version9.5.5 の環境でUDFを作成しようとDDLを実行したところ、 以下のエラーがでて作成できませんでした。 db2 9.7 では同じDDLで作成できました。 どうやらcursorの定義に問題がありそうなのですが、 9.5では以下のcursor定義はできないものなのでしょうか? よろしくお願いします。 --エラー内容-------------------------- DB21034E コマンドが、有効なコマンド行プロセッサー・コマンドでないため、 SQL ステートメントとして処理されました。 SQL 処理中に、そのコマンドが返されました。 SQL0104N "GentaniMeisai CURSOR" に続いて予期しないトークン "FOR" が見つかりました。予期されたトークンに "<SQL_variable_condition_declaration>" が含まれている可能性があります。 LINE NUMBER=15. SQLSTATE=42601 --DDLの中身(一部)------------- DECLARE curGentaniMeisai CURSOR FOR SELECT aaa FROM bbb WHERE ccc = [変数] ;

みんなの回答

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.2

ANo.1です。 >"GentaniMeisai CURSOR" >ここの文はエラー箇所の前20文字が表示されるみたいです。 失礼しました。20文字だけでしたね。(マニュアル確認しとけって言われそうですが。) 他にエラーが出ていてその影響で、FORがダメとメッセージが出ているのでない限りは、 私にはエラーになる理由が思いつかないです。 あと私に思いつくのは、念のため、FORの前に WITHOUT HOLD と WITHOUT RETURN (もしくは他のパラメタ) をつけてみても同じか確認してみるくらいです。 (マニュアルは、省略OKとなっているようにしか思えませんが。) 構文。最初につけたサイトからの引用。 >>-DECLARE--cursor-name--CURSOR--●--| holdability |--●----------> >--| returnability |--●--FOR--+-select-statement-+------------->< '-statement-name---' holdability .-WITHOUT HOLD-. |--+--------------+---------------------------------------------| '-WITH HOLD----' returnability .-WITHOUT RETURN-------------. |--+----------------------------+-------------------------------| | .-TO CALLER-. | '-WITH RETURN--+-----------+-' '-TO CLIENT-'

stay_gold
質問者

補足

解決しました。 DB2 9.5でなぜUDFではDECLARE FOR で定義できないかは分かりませんが、 FORステートメントを使って解決しました。 BEGIN ATOMIC DECLARE fullname CHAR(40); FOR vl AS SELECT firstnme, midinit, lastname FROM employee DO SET fullname = lastname CONCAT ',' CONCAT firstnme CONCAT ' ' CONCAT midinit; INSERT INTO tnames VALUES (fullname); END FOR; END

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.1

エラーメッセージに SQL0104N "GentaniMeisai CURSOR" に続いて予期しないトークン "FOR" が見つかりました。 とあるので カーソル名をcurGentaniMeisaiと認識していないようですね。 日本語が混ざっているとか何かおかしなコードが入っているとかしていないですか? 試してみるなら、カーソル名をc1とかにするとうまくいくとか。 9.5のマニュアル(下記URL)見てみたけど文自体は問題なさそう。 http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/index.jsp?topic=%2Fcom.ibm.db2.luw.sql.ref.doc%2Fdoc%2Fr0000937.html

stay_gold
質問者

補足

回答ありがとうございます。 "GentaniMeisai CURSOR" ここの文はエラー箇所の前20文字が表示されるみたいです。 なので途中で切れているだけで認識されていないということではなさそうです。 ちなみに DECLARE curGentaniMeisai CURSOR; としたらこの文自体はエラーとなりませんでした。 何かしらの条件でFORが使えないのでしょうか…。

関連するQ&A