- PR -

FETCHして取得する列を 動的に設定したいが・・・・

1
投稿者投稿内容
大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2006-11-15 17:47
いつもお世話になっております

user_tab_columns から ある特定のテーブル(a テーブル)の 
項目名と項目タイプ、長さ、項目数を
取得した状態で

項目タイプ別に 配列に格納したいのです
行を配列に入れる方法は たくさん 見かけるのですが
無謀なのでしょうか?

テーブル内にデータも入っているけど
データが無いというエラーが 消せません (;_;)


type tarrayretu_x is table of varchar2(255) index by binary_integer;
type tarrayretu_n is table of number index by binary_integer;

itm_x tarrayretu_x;
itm_n tarrayretu_n;

cid integer := dbms_sql.open_cursor;

sqlstr := 'select itm1,itm2,itm3 from a';
itm_cnt integer := 3;

begin

dbms_sql.parse(cid, sqlstr, dbms_sql.native);

for i in 1 .. itm_cnt loop
if instr(pal_type(i),'char') > 0 then
dbms_sql.define_column(cid, i, itm_x(i), pal_leng(i)); ----> ORA-01403: データが見つかりません エラーになる
else
dbms_sql.define_column(cid, i, itm_n(i), 16);
end if;
end loop;

ret := dbms_sql.execute(cid);

loop
if dbms_sql.fetch_rows(cid) < 1 then
exit;
else
for i in 1 .. itm_cnt loop
if instr(pal_type(i),'char') > 0 then
dbms_sql.column_value(cid, i, itm_x(i));
else
dbms_sql.column_value(cid, i, itm_n(i));
end if;
end loop;
end if;
end loop;




[ メッセージ編集済み 編集者: 七 編集日時 2006-11-15 17:48 ]

[ メッセージ編集済み 編集者: 七 編集日時 2006-11-15 18:56 ]
大ベテラン
会議室デビュー日: 2003/09/16
投稿数: 193
お住まい・勤務地: 千葉県
投稿日時: 2006-11-15 20:40
すみません 解決しました

dbms_sql.define_column(cid, i, itm_x(i), pal_leng(i));

この行の前に 
itm_x(i) := NULL;
のヌル クリアする行を1行入れたら
うまくいきました

理由は よく わかりません
が とりあえず・・・
1

スキルアップ/キャリアアップ(JOB@IT)