您好,欢迎访问一九零五行业门户网

在Apex把csv导入数据库Clob字段再导入到各自对应列的解决方法

1. 需求 有一用户数据存在于csv文件,因为apex不允许上传超过44列的数据(在该案例中有90多列),所以需求是把所有列先导入到一个clob字段,然后再用存储过程导出到对应的列。 2.解决方法 1) 创建一个有clob字段的表 create table table3( content clob) ; 2
1. 需求
有一用户数据存在于csv文件,因为apex不允许上传超过44列的数据(在该案例中有90多列),所以需求是把所有列先导入到一个clob字段,然后再用存储过程导出到对应的列。
2.解决方法
1) 创建一个有clob字段的表
create table table3( content clob) ;
2)创建一个具有真实列的表
create table table4( name varchar2(20 byte),sid varchar2(20 byte)) ;
3) 准备一个csv文件
比如,文件名叫book1.csv,文件格式如下
a11,1b2,2c33,3
4) 把csv放到一个目录下
比如/home/oracle/csv
同时,在oracle建立一个directory对象
create or replace directory csv as '/home/oracle/csv' ;grant read,write on directory csv to user1;
5) 写一个存储过程把csv放入clob
create or replace procedure writecsvintoclob asl_max_line_length integer := 32767;l_buffer varchar2(32767);l_file utl_file.file_type;l_clob clob;beginl_file := utl_file.fopen('csv', 'book1.csv', 'r', l_max_line_length);dbms_lob.createtemporary(l_clob, true, dbms_lob.session);loopbeginutl_file.get_line(l_file, l_buffer);dbms_lob.append(l_clob, l_buffer||';');exceptionwhen no_data_found thenexit;end;end loop;insert into table3 (content) values (l_clob);dbms_lob.freetemporary(l_clob);utl_file.fclose(l_file);end writecsvintoclob;
6) 写一个子存储过程把varchar放入列 (为把clob放入列做准备)
create or replace procedure putvarcharintocol(p_buffer in varchar2) asl_len number;l_start number := 1;l_end number := 32767;l_amount number:=32767;l_field varchar2(32767);l_buffer varchar2(32767);i number :=1;l_sql varchar2(32767);beginl_buffer := p_buffer || ',';l_len :=length(l_buffer);--dbms_output.put_line('l_len='||l_len);l_end := instr(l_buffer, ',', l_start);l_sql := 'insert into table4 (name,sid) values (';while(l_start 7) 写一个存储过程把clob放入列
create or replace procedure putclobintocol asl_clob clob;l_start number := 1;l_end number := 32767;l_amount number:=32767;l_buffer varchar2(32767);l_len number;i number:=1;beginselect content into l_clob from table3;l_len := dbms_lob.getlength(l_clob);--dbms_output.put_line('l_len='||l_len);l_end := instr(l_clob, ';', l_start);while(l_start 3. 注意事项
由于有90多列,可能字符串的长度会超过32767,这需要额外处理。
其它类似信息

推荐信息