在实际生产环境中,常会碰到将一些如通过通讯接口传过来的数据(文本文件 txt)导入到数据库的某张表中。通常做法是使用ORACLE自带的包功能打开文件,将文件中的数据用LOOP循环一行行读入内存数组中,之后再使用LOOP循环将内存数组写入表中。
例如将一个文本文件56万+行数据导入数据库表:
create or replace procedure bob_tmp_700 is
filehandle utl_file.file_type;
filebuffer varchar2(4000);
fileName varchar2(50);
--记时用
v_duration interval day(1) to second(0);
v_start timestamp(2);
type t_table is table of tmp_bobtest%rowtype index by binary_integer;
v_tmpdata t_table;
--行分隔
v_tab_split TAB_SPLIT;
v_loopcount number(10);
begin
v_loopcount:=0;
--拼接文件名
fileName := 'WM_CHK' || to_char(sysdate, 'yyyyMMdd') || '.txt';
--打开文件
filehandle := utl_file.fopen('FILETRANS', fileName, 'r');
v_start:=systimestamp;
dbms_output.put_line('开始打开文件并将数据导入内存 time: '|| v_start );
loop
v_loopcou