oracle 从本地服务器读取CSV文件的数据,插入到数据表里。数据文件可能是多个比如table1_2016-06-03.csv
答案:1 悬赏:0 手机版
解决时间 2021-12-02 21:19
- 提问者网友:我是女神我骄傲
- 2021-12-02 11:52
oracle 从本地服务器读取CSV文件的数据,插入到数据表里。数据文件可能是多个比如table1_2016-06-03.csv
最佳答案
- 五星知识达人网友:酒醒三更
- 2021-12-02 12:10
你的问题非常简单:
1、存储过程设置为只读取一个文件,存储过程设置传入两个参数,为文件路径和文件名。
2、写个脚本,列出文件名,把这些文件一个一个的送给存储过程处理。
给你个读文件存储过程存储过程:
PROCEDURE read_file(loc_in IN VARCHAR2, file_in IN VARCHAR2)
IS
file_handle UTL_FILE.FILE_TYPE;
NewLine VARCHAr2(1024);
v_NBRCH TEST.NBRCH%TYPE;
v_NACNT TEST.NACNT%TYPE;
v_ONAME TEST.ONAME%TYPE;
BEGIN
file_handle := UTL_FILE.FOPEN (loc_in, file_in, 'R');
LOOP
BEGIN
UTL_FILE.GET_LINE(file_handle,NewLine);
EXCEPTION
WHEN NO_DATA_FOUND THEN
--跳出系统出口
UTL_FILE.FCLOSE(file_handle);
EXIT;
WHEN OTHERS THEN
UTL_FILE.FCLOSE(file_handle);
RETURN;
END;
--这里是处理读出一行数据,分离出每个域到你的变量里面去。
v_NBRCH:=TO_NUMBER(SUBSTr(NewLine,1,7));
v_NACNT:=TO_NUMBER(SUBSTr(NewLine,9,9));
v_ONAME:=SUBSTr(NewLine,19,10);
--插入数据库
INSERT INTO TEST(NBRCH,NACNT,ONAME) VALUES(v_NBRCH,v_ROWN,v_ONAME);
COMMIT;
END LOOP;
END;如果运行读不到数据或出错,请使用Oracle dba登录,初始化系统变量,然后重启Oracle
ALTER SYSTEM SET UTL_FILE_DIR=*;
1、存储过程设置为只读取一个文件,存储过程设置传入两个参数,为文件路径和文件名。
2、写个脚本,列出文件名,把这些文件一个一个的送给存储过程处理。
给你个读文件存储过程存储过程:
PROCEDURE read_file(loc_in IN VARCHAR2, file_in IN VARCHAR2)
IS
file_handle UTL_FILE.FILE_TYPE;
NewLine VARCHAr2(1024);
v_NBRCH TEST.NBRCH%TYPE;
v_NACNT TEST.NACNT%TYPE;
v_ONAME TEST.ONAME%TYPE;
BEGIN
file_handle := UTL_FILE.FOPEN (loc_in, file_in, 'R');
LOOP
BEGIN
UTL_FILE.GET_LINE(file_handle,NewLine);
EXCEPTION
WHEN NO_DATA_FOUND THEN
--跳出系统出口
UTL_FILE.FCLOSE(file_handle);
EXIT;
WHEN OTHERS THEN
UTL_FILE.FCLOSE(file_handle);
RETURN;
END;
--这里是处理读出一行数据,分离出每个域到你的变量里面去。
v_NBRCH:=TO_NUMBER(SUBSTr(NewLine,1,7));
v_NACNT:=TO_NUMBER(SUBSTr(NewLine,9,9));
v_ONAME:=SUBSTr(NewLine,19,10);
--插入数据库
INSERT INTO TEST(NBRCH,NACNT,ONAME) VALUES(v_NBRCH,v_ROWN,v_ONAME);
COMMIT;
END LOOP;
END;如果运行读不到数据或出错,请使用Oracle dba登录,初始化系统变量,然后重启Oracle
ALTER SYSTEM SET UTL_FILE_DIR=*;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯