- - PR -
DEVELOPER2000からの動的SQLについて
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2006-08-30 17:18
はじめて投稿させて頂きます、RYOと申します。
よろしくお願いいたします。 DBMS.SQLパッケージを使用して動的SQLを実行したいのですが、 COLUMN_VALUE時にエラーとなってしまいます。 エラーの内容は「ORA-06562:外部の引数の型が列またはバインド変数の型に合致しません」です。 DATE型の時はうまくいきますが、CHAR型の場合のみエラーとなります。 この例ですと、取得する値はChar(10)で格納する変数も取得するテーブルのデータ型と同じにしております。 DEFINE_COLUMN_CHAR および COLUMN_VALUE_CHARを使用しても結果は同じでした。 分りづらい説明で申し訳ありませんが、よろしくお願いします。 <環境> WindowsNT 4.0 Oracle8 Release 8.0.5 Developer2000 ------------------------------------------------------------------- PROCEDURE Exec_Query( p1,p2 ) IS DMY NUMBER; CURID INTEGER; Sqlstr varchar2(5000); loc_date date; loc_col1 table1.col1%TYPE; -- 項目「col1」はChar(10) です BEGIN CURID := DBMS_SQL.OPEN_CURSOR; Sqlstr := 'SELECT sysdate,col1 FROM table1 WHERE rownum = 1'; DBMS_SQL.PARSE(CURID,sqlstr,1); DBMS_SQL.DEFINE_COLUMN(CURID, 1, loc_date); DBMS_SQL.DEFINE_COLUMN(CURID, 2, loc_col1, 10); DMY := DBMS_SQL.EXECUTE(CURID); WHILE DBMS_SQL.FETCH_ROWS(CURID)>0 LOOP DBMS_SQL.COLUMN_VALUE(CURID, 1, loc_date); ←date型はうまくいく DBMS_SQL.COLUMN_VALUE(CURID, 2, loc_col1); ←この部分でエラー(ORA-06562) END LOOP ; END ; [ メッセージ編集済み 編集者: RYO 編集日時 2006-08-30 17:29 ] | ||||
|
投稿日時: 2006-08-30 18:20
こんにちは。
DBMS_SQL.COLUMN_VALUE(CURID, 2, loc_col1); Char型の場合はサイズの指定が必要ですね。 [Googleで'ORA-06562'を検索] http://www.google.co.jp/search?hl=ja&q=ORA-06562&btnG=Google+%E6%A4%9C%E7%B4%A2&lr= | ||||
|
投稿日時: 2006-08-31 09:13
おはようございます。
ご回答ありがとうございました。 >DBMS_SQL.COLUMN_VALUE(CURID, 2, loc_col1); >Char型の場合はサイズの指定が必要ですね。 DBMS_SQL.COLUMN_VALUEのパラメータはこのようになっており、 サイズ指定はできないようです。 DBMS_SQL.COLUMN_VALUE ( c IN INTEGER, position IN INTEGER, value OUT <datatype> [,column_error OUT NUMBER] [,actual_length OUT INTEGER]); 当掲示板に投稿する前にgoogleでの検索もして、似たような質問も実際あったのですが 解決されずじまいだったようです。 他に情報等がありましたら、よろしくお願いいたします。 [ メッセージ編集済み 編集者: RYO 編集日時 2006-08-31 09:13 ] | ||||
|
投稿日時: 2006-08-31 13:16
申し訳ないです、上記は勘違いでした。 問題のPL/SQL文ですが・・・ ・%TYPEを使用せず明示的に型を宣言した場合でも再現しますでしょうか? ・SQL*PLUSからは実行可能でしょうか? ・COLUMN_VALUEのactual_lengthより実データサイズの取得は行なえますか? ※私の環境(Oracle 9.2.0)では再現できませんでした。 お力になれずスイマセン。。。 | ||||
|
投稿日時: 2006-09-01 09:15
ご回答ありがとうございます。
・%TYPEを使用せず明示的に→ダメでした。 ・SQL*PLUSからは実行可能か?→可能でした ・COLUMN_VALUEのactual_lengthより〜→行えませんでした。 会社で契約しているサポートにも相談してみたのですがdeveloper 6iでは 再現しないとのことでした。 Sql*plusで動作確認できたものがdeveloper2000では動かないということは、 やはりdeveloper2000では実現できないということでしょうかね・・・ いろいろと相談に乗っていただきありがとうございました。 | ||||
1
