最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:懂视网 责编:小采 时间:2020-11-09 14:10:42
文档

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

在Apex把csv导入数据库Clob字段再导入到各自对应列的解决方法:1. 需求 有一用户数据存在于csv文件,因为Apex不允许上传超过44列的数据(在该案例中有90多列),所以需求是把所有列先导入到一个clob字段,然后再用存储过程导出到对应的列。 2.解决方法 1) 创建一个有clob字段的表 CREATE TABLE TABLE3(
推荐度:
导读在Apex把csv导入数据库Clob字段再导入到各自对应列的解决方法:1. 需求 有一用户数据存在于csv文件,因为Apex不允许上传超过44列的数据(在该案例中有90多列),所以需求是把所有列先导入到一个clob字段,然后再用存储过程导出到对应的列。 2.解决方法 1) 创建一个有clob字段的表 CREATE TABLE TABLE3(

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,1

b2,2

c33,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 AS
l_max_line_length integer := 32767;
l_buffer varchar2(32767);
l_file UTL_FILE.FILE_TYPE;
l_clob clob;
BEGIN

l_file := utl_file.fopen('CSV', 'book1.csv', 'r', l_max_line_length);

dbms_lob.createtemporary(l_clob, TRUE, DBMS_LOB.session);

loop
begin
utl_file.get_line(l_file, l_buffer);

dbms_lob.append(l_clob, l_buffer||';');
exception
when no_data_found then
exit;
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
) AS
l_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);
BEGIN
l_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 AS
l_clob clob;
l_start number := 1;
l_end number := 32767;
l_amount number:=32767;
l_buffer varchar2(32767);
l_len number;
i number:=1;
BEGIN
select 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,这需要额外处理。

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

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

在Apex把csv导入数据库Clob字段再导入到各自对应列的解决方法:1. 需求 有一用户数据存在于csv文件,因为Apex不允许上传超过44列的数据(在该案例中有90多列),所以需求是把所有列先导入到一个clob字段,然后再用存储过程导出到对应的列。 2.解决方法 1) 创建一个有clob字段的表 CREATE TABLE TABLE3(
推荐度:
标签: 数据 导入 数据库
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top