- - PR -
SELECT INTO文について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-05-29 16:16
そう言われてみると、確かにそうですね。 失礼いたしました。 | ||||
|
投稿日時: 2007-05-29 17:33
返答が遅くなり申し訳ありません。
皆さん本当にありがとうございます。 動的SQLのページは参考にさせていただきました。
CREATE TABLE T_CST_CODE ( CODE_ID NUMBER(3) NOT NULL, CODE_TYPE NUMBER(2) NOT NULL, CODE_NM VARCHAR2(100) NOT NULL ); CREATE TABLE T_CST_TEST ( OPE_ID VARCHAR2( NULL, ABSINDEX NUMBER(3) NULL, RELINDEX NUMBER(3) NULL, OWN_FLG NUMBER(2) NULL, DATA VARCHAR2(300) NULL ); という二つのテーブルがあったとして、 sDATA DBMS_SQL.VARCHAR2_TABLE; SELECT CODE_ID,CODE_TYPE,CODE_NM INTO sDATA(0),sDATA(1),sDATA(2) FROM T_CST_CODE; SELECT OPE_ID,ABSINDEX,RELINDEX,OWN_FLG,DATA INTO sDATA(3),sDATA(4),sDATA(5),sDATA(6),sDATA(7) FROM T_CST_TEST; というように、一つのPL/SQL表に格納していきたいです。 このsDATAというPL/SQL表は、バインドを使用してINSERT処理を行うためのものです。 検討違いな事を言ってしまっていたら、ごめんなさい | ||||
|
投稿日時: 2007-05-29 21:05
satokoさんのやりたいことはできるはずなのですが、結局何が問題なんですか?
まだ「ORA-00904: 列名が無効です」が出るのですか? PL/SQL表の要素ではなく、VARCHAR2で宣言した変数をずらずら並べるのはうまくいきますか? | ||||
|
投稿日時: 2007-05-30 02:20
もう一度見直して、一件だけPL/SQL表に格納したら、動きました。。。 お騒がせ致しました。 このような初歩的なミスは無いように気をつけます。 BULK COLLECT INTOや動的SQLの参考HPは大変参考になりました。 SELECT INTO文で取得出来たのは良かったのですが、 大量のデータを扱う事になってしまい、SELECT INTO文だとダラダラしてしまうので 教わったBULK COLLECT INTO句の使用を試みました。 -------------------------------------------------------- DECLARE sTABLE_DATA DBMS_SQL.VARCHAR2_TABLE; BEGIN SELECT OPE_ID BULK COLLECT INTO sTABLE_DATA FROM T_CST_TEST; END; -------------------------------------------------------- 実行すると、 ORA-01403: データが見つかりません と言われてしまいます。 BULK COLLECT INTOはDBMS_SQL.VARCHAR2_TABLEには使えないのでしょうか? -------------------------------------------------------- DECLARE TYPE TYPE_VARCHAR IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER; BEGIN sTYPE TYPE_VARCHAR; SELECT OPE_ID BULK COLLECT INTO sTYPE FROM T_CST_TEST; END; -------------------------------------------------------- は正常に動きました。 BULK COLLECT INTO句にこだわっているわけではないのですが、 最終的にはDBMS_SQL.VARCHAR2_TABLEの型で値の入っているものが欲しいので、 何か良い方法はないでしょうか? | ||||
|
投稿日時: 2007-05-30 15:21
使えないとは聞いたことがないですね。使えないとすれば、実行時エラーではなくて、コンパイル時エラーになるでしょうし。 「ORA-01403: データが見つかりません」というメッセージからすると、そのSELECT文が結果を1行も返さなかったことが原因のように思えるのですが。 | ||||
|
投稿日時: 2007-05-31 10:41
問題の箇所を、VARCHAR2で宣言した変数に代入しようとすると、値は取れました。 なのでSELECT文から結果は返ってきていると思うのですが | ||||
|
投稿日時: 2007-05-31 11:38
そうですか。 実際に自分でも試したりして、解決のお手伝いをしてあげたいのはやまやまなのですが、ちょっと時間的に無理なので、すみませんが後は他の方にお任せします。 もしこちらでよい解決策が見つからなければ、OTNのほうにも行ってみることをお勧めします。 | ||||
|
投稿日時: 2007-05-31 15:03
カーニーさん、どうもありがとうございます。 とても助かりました。 OTNの方も覗いてみる事にします。 |