有人可以帮我解决将.CSV
文件导入Oracle表的plsql存储过程吗?想要创建一个接受文件名和表名的程序。
注意:我使用的是UTF-8文件格式
答案 0 :(得分:1)
存储在数据库中的pl / sql过程无法在桌面上运行。你可以
get_file
)答案 1 :(得分:0)
您必须创建一个目录,并将其指向您拥有该文件的文件夹。 (您需要创建该权限的权限)
create or replace procedure get_file (p_dir varchar2, p_file varchar2)
is
line varchar2(4000);
v_file utl_file.file_type;
begin
v_file := utl_file.fopen(p_dir,p_file,'R');
loop
utl_file.get_line(v_file,line);
-- insert code here
dbms_output.put_line(line);
end loop;
exception when others then
-- The only way to know when we reach the end of the file is to get and exception
utl_file.fclose(v_file);
end;
答案 2 :(得分:0)
我认为简单的方法是使用外部表。这是一个像桌子一样对待但是他从文件中读取数据的对象。为了实现这一点,你需要特权创建任何目录。 所以首先创建directort:
CREATE OR REPLACE DIRECTORY imp_data AS 'c:\tmp\';
或服务器上的任何其他路径目录。接下来你需要授予它
GRANT READ, WRITE ON DIRECTORY imp_data TO PUBLIC;
现在是最好的部分:)
CREATE TABLE imp_data (
ID NUMBER(20),
NAME VARCHAR2(50),
CITY VARCHAR2(200)
)
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER --this is the read-file driver
DEFAULT DIRECTORY imp_data
ACCESS PARAMETERS
RECORDS DELIMITED BY NEWLINE
BADFILE 'bad'
LOGFILE 'log'
FIELDS TERMINATED BY ',' -- CSV terminate mark
(ID, NAME, CITY)) -- the order of the columns in the file
LOCATION ('dane.csv')) -- name of file
PARALLEL 5
REJECT LIMIT 200; -- numbers of bad row before break import