• 締切済み

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

  • DB2でselectは出来るが、updateなどが出来ない

    ご覧頂き、有難うございます。 strutsを使って、Webアプリを作成しています。 DBはDB2を使ってまして、タイトルの通り 画面を使って、検索は出来るのですが 更新系(update,delete,insert)が出来なくなってしまいました。 エラーは SQL1822N 予期しないエラー・コード "-290" をデータ・ソース "LINK_CRP_JDE" から受け取りました。 関連したテキストとトークンは "func="SQLExecute" msg=" SQL0290N 表スペース・" です。SQLSTATE=560BD と出ています。 何かご存知ある方、回答御願いします。

  • DB2のログインについて

    DB2初心者です。  AIX5.2+DB2 8.1環境を使用しております。DB2へのアクセスはこのUnixシステムからのみと想定してください(すなわち、DB2へのログインクライアントもサーバーも同じ AIX上で動いているという想定です)。 この環境のもと、DB2のインスタンスユーザであるdb2inst1からDB2上のsampleへログインしようと試みます。  > db2 connect to sample user db2inst1 using xxxxx(password) すると以下のメッセージが返されます。 SQL30082N Attempt to establish connection failed with security reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001  次に、以下のコマンドを実行します。 db2 connect to sample user db2inst1 using xxxxx new yyyyy confirm yyyyy SQL30083N Attempt to change password for user id "db2inst1" failed with security reason "" (""). SQLSTATE=08001  となり、エラーでログインできません。しかし、以下の  コマンドでアクセスすると、    > db2 connect to sample DB2へ正しくアクセス可能です。  db2 connect to sample user xxx using xxx形式で  アクセスするにはどうすればよいのでしょうか。  ちなみに、DB2の設定は、インストール直後の状態です。 dbm cfgのAuthenticationはサーバーにしております。これをClientにしても結果は同じでした。また、sampleには特にGrant connect/loadも実行しておりません。  以上よろしく御願い申し上げます。

  • db2のデータベース作成エラーについて

    はじめまして。 以前、以下のような質問がされていると思います。 「WebSphereでDB2をデータベースとして行っているのですけど、今日起動してDB2にconnectしようと思ったら COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] SQL1032N start database manager コマンドが発行されていません。 SQLSTATE=57019 というエラーメッセージが出てきてconnectできなくなってしまいました。どなたか改善方法知っている方いらっしゃいましたら教えてください。よろしくお願いします。」 その原因が「原因はユーザーのpassを変更した際、DB2のユーザーを変えなかったのが原因でした。」ということなのですが、現在同じエラーが出て困っています。どのような対処をすればよいか教えていただけないでしょうか。よろしくお願いいます。

  • DB2で SQL1032N start database managerエラー

    はじめまして。初めて書き込みさせていただきます。 WebSphereでDB2をデータベースとして行っているのですけど、今日起動してDB2にconnectしようと思ったら COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] SQL1032N start database manager コマンドが発行されていません。 SQLSTATE=57019 というエラーメッセージが出てきてconnectできなくなってしまいました。どなたか改善方法知っている方いらっしゃいましたら教えてください。よろしくお願いします。

  • コマンドからDB名に"-"を使うには?

    DB名に"-"を使いたいと思います。 ところが、コマンドから入れると、下記のようにエラーになってしまいます。 mysql> create database a-test; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-test ' at line 1 しかしながら、phpMyAdminの方からは、作成することが出来ます。 コマンドの方からa-testと言ったDBを作成するのにはどうしたらいいのでしょうか? 尚、バージョンは5.5.27です。 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • DB2のクライアントを7.1から8.1に変更した時に出るエラーについて

    初歩的な質問なのかもしれませんが DB2を扱うのが初めてなのでお願いします。 私なりに調べて見ましたが原因がわからず困っています VB6.0で開発してあるプログラムで7.1では正常に動作していましたが8.1にバージョンアップさせたところ 「 SQL0100W FETCH、UPDATE または DELETE の対象となる行がないか、または照会の結果が空の表です。 SQLSTATE=02000 」 というエラーメッセージが出てしまいます。 7.1ではこのエラーはOnErrorGoToに飛ばないみたいなのですが8.1で飛んでしまいます。 これはどのように対処すればよろしいのでしょう?

  • 異なるOS間でのDBコピー方法

    現在WindowsSever2003上で稼動しているDBをaixサーバに移行したいのですが、DB単位でのexp/impで可能でしょうか? exp/impで可能であれば、aixサーバ側でimp前に必要な作業(データファイルの作成、DBの作成?)を教えていただけると助かります。 もっと手軽に出来る方法があれば教えていただけると有難いです。 バージョンはコピー元、コピー先共にOracle10gになります よろしくお願いします。

  • create databaseがうまくいきません。。

    databaseを新規に作成したいのですが 今使用しているDB(Oracle 10g Express Edition )は インストール時にデフォルトでデータベースを 作成してしまうため、 「create databese」のsql文を実行すると以下のエラーが出てしまいます。 すでにマウントってどういうことなのでしょうか。 ORA-01501: CREATE DATABASE文でエラーが発生しました。 ORA-01100: データベースはすでにマウントされています。 今存在するDB名が分かれば「drop」コマンドで 削除を試みようと思っているのですが DB名を参照する方法もよく分かりません。 どなたかご教授お願いします。

  • DB2のエラーの回避方法を知っている方教えていただけますか?

    「 SQL30040N 後続のコマンドまたは SQL ステートメントの正常な実行に影響を与えない使用不能リソースのために、実行が失敗しました。理由 "0x200002D"、リソース・タイプ "MEMORY"、リソース名 "DRDA HEAP"、製品 ID "SQL07029 "。 SQLSTATE=57012 」 このようなエラーメッセージが出て困っています。 回避方法を知っている方教えてもらえないでしょうか? 環境は サーバー OS :Windows Nt4.0 SP6 DB2:Ver7 Fix13 クライアント(1) OS :Windows2000 SP4 DB2:Ver8 Fix7 クライアント(2) OS :Windows2000 SP4 DB2:Ver8 Fix4 開発言語:VB6.0 Sp5 接続方法:ADO Microsoft Data EnvironmentでCommandを使用 クライアントのFixを当てる前までは、このメッセージが出ていなかったのですが、ほかのエラー回避のためにFixを当てたところ今度このエラーが出るようになってしまいました。 IBM等で調べたのですが具体的な解決策がなく投稿しました。よろしくお願いします。

  • DB2のテーブルサイズについて

    DB2で新規にテーブルを作成しようとしています。 サイズが4Kのテーブルスペースに、サイズ4000バイトのテーブルを作成したいのですが、 以下のようなエラーになってしまいます。 SQL0670N The row length of the table exceeded a limit of "4005" bytes. (Table space "USERTBS2".) SQLSTATE=54010 サイズを小さくして試してみたら、3976バイトのテーブルであれば作成できるようです。 どうして3976バイトまでして受け付けられないのでしょうか。 理由が知りたいです。 よろしくお願いいたします。