プロシージャからパラメータとしてclobを取得していて、CSVファイルが含まれています。私はこのデータを読んでそれを別のOracleテーブルにロードする必要があります。PL/SQLを使用してOracleのClob列からCSVデータを読み取る方法
誰かがこれを行う方法を教えてください。
プロシージャからパラメータとしてclobを取得していて、CSVファイルが含まれています。私はこのデータを読んでそれを別のOracleテーブルにロードする必要があります。PL/SQLを使用してOracleのClob列からCSVデータを読み取る方法
誰かがこれを行う方法を教えてください。
私はCSVとしてCLOBを解析するの即時方法を知りませんが、Oracleは、このようなExternal TablesやSQL*LoaderとしてCSVファイルを操作するためのツールの数を提供します。
ので、アプローチがするかもしれません:DBMS_LOBとUTL_FILE
データをファイルにエクスポートしないでください。
clobを有用なものに変換し、解析してから、別のテーブルに書き込む必要があります。
CSVReader reader = new CSVReader(the_reader_from_getCharacterStream);
ftwOracle's CLOB Objectはいくつかの有用な方法を提供する。
CSVReader
は、Open CSVである。
AFAIK Oracleにはこのための準備が整っていません。 1つの有望な候補者はDBMS_UTILITY.COMMA_TO_TABLEですが、それは全くオプションではありません非常に特別なタスクにheavily limitedです。だから、あなたの袖を転がして自分のものを作ってください。
あなたの仕様が少し曖昧ですが、一つの選択肢はSPLIT
機能です:
create table so18t (
id number,
csv clob
);
insert all
into so18t values(1,'1,2,3'||chr(10)||
'40,5,6'||chr(10)||
'700,80,9'||chr(10))
into so18t values(2,'aaa,bbb,ccc'||chr(10)||
'ddd,eee,fff'||chr(10)||
'ggg,hhh,iii'||chr(10))
select 1 from dual;
declare
v_lines jh_util.stringlist_t;
v_values jh_util.stringlist_t;
begin
for rec in (select * from so18t order by id) loop
v_lines := jh_util.split(rec.csv, chr(10));
for i in v_lines.first .. v_lines.last loop
dbms_output.put_line('line ' || i || ':');
v_values := jh_util.split(v_lines(i));
/* Do what you want with the values - I just print them */
for j in v_values.first .. v_values.last loop
dbms_output.put_line('v_values(' || j || ') = ' || v_values(j));
end loop;
end loop;
end loop;
end;
/
show errors
プリント:讲义1コースのOracle
line 1:
v_values(1) = 1
v_values(2) = 2
v_values(3) = 3
line 2:
v_values(1) = 40
v_values(2) = 5
v_values(3) = 6
line 3:
v_values(1) = 700
v_values(2) = 80
v_values(3) = 9
line 1:
v_values(1) = aaa
v_values(2) = bbb
v_values(3) = ccc
line 2:
v_values(1) = ddd
v_values(2) = eee
v_values(3) = fff
line 3:
v_values(1) = ggg
v_values(2) = hhh
v_values(3) = iii
PL/SQL procedure successfully completed.
はスプリットが、SO helpsを提供していません。上記の例では、自分のものを使っています。
その他の興味深い資源:
JH_UTIL.SPLIT()関数も投稿できますか? –
@davorここでは投稿しませんが、[Bitbucket](https://bitbucket.org/janihur/orasql-ex/src/c39936d5c35b/packages/?at=default)で入手できます。 – user272735
使用しているOracleのバージョンは何?それは答えに影響を与えるかもしれません。 –