早上好,我一直在尝试将数据从csv文件加载到表中,但是如果你有权创建新的目录对象,我发现了如何做到这一点。
我使用UTL_FILE和外部表两种方式在本地完成,但是,我需要特殊权限才能执行此操作。
但是,当我尝试在线进行时,我发现我没有这些特权,所以我想知道没有它们是否有办法做到这一点。
谢谢!
PS:两种方法如下:
CREATE TABLE TEST
(
A varchar2(25);
B number;
)
使用UTL_FILE:
PROCEDURE load AS
F UTL_FILE.FILE_TYPE;
V_LINE VARCHAR2(4000);
v_A varchar2(25);
v_B number;
BEGIN
F := UTL_FILE.FOPEN (<directory>, '<csv file>', 'r');
IF UTL_FILE.IS_OPEN(F) THEN
LOOP
BEGIN
UTL_FILE.GET_LINE(F, V_LINE, 1000);
IF V_LINE IS NULL THEN
EXIT;
END IF;
v_A := REGEXP_SUBSTR(V_LINE, '[^;]+', 1, 1);
v_B := REGEXP_SUBSTR(V_LINE, '[^;]+', 1, 2);
INSERT INTO test(v_A, v_B);
COMMIT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
EXIT;
END;
END LOOP;
END IF;
UTL_FILE.FCLOSE(F);
END load;
WITH外部表
PROCEDURE loadcsv AS
A varchar2(25);
B number;
BEGIN
INSERT INTO test select * testload;
COMMIT;
END loadcsv;
HAVING
CREATE TABLE testload
(
A VARCHAR2(25)
B number
)
ORGANIZATION EXTERNAL
( TYPE ORACLE_LOADER
DEFAULT DIRECTORY "PRUEBAS"
ACCESS PARAMETERS
( records delimited by newline
fields terminated by ';'
)
LOCATION
( 'Log_CSV_REND_SICTG_20170507.csv'
)
)
REJECT LIMIT UNLIMITED ;
答案 0 :(得分:1)
您可能想尝试使用SQL Loader加载。它易于使用且速度非常快。您必须创建一个控制文件来描述如何加载数据,并且需要具有与您尝试加载的表相同的结构。对于你的情况,它可能看起来像这样。
<强> test.ctl 强>
LOAD DATA
INFILE <yourfilepath>
APPEND INTO TABLE TEST
FIELDS TERMINATED BY ','
(
A,
B
)
然后,从命令行。
host sqlldr username/password control=youfolder\test.ctl
log=yourfolder\test.log