我在pl sql中使用以下过程
CREATE OR REPLACE PROCEDURE LOAD ( file_path VARCHAR2)
AS
BEGIN
EXECUTE IMMEDIATE 'CREATE OR REPLACE DIRECTORY ext_tab_data AS '''||file_path||''' ';
EXECUTE IMMEDIATE '
CREATE TABLE DUMMY
(
col1 VARCHAR2(2000),
col2 VARCHAR2(2000)
)
ORGANIZATION EXTERNAL
(
TYPE oracle_loader
DEFAULT DIRECTORY ext_tab_data
ACCESS PARAMETERS
(
RECORDS DELIMITED BY NEWLINE
badfile ext_tab_data:''bad_file.bad''
logfile ext_tab_data:''logs.log''
RECORDS DELIMITED BY NEWLINE
(FIELDS TERMINATED BY '','')
MISSING FIELD VALUES ARE NULL
(
col1 CHAR ,
col2 CHAR
))
LOCATION (''F1.txt'')
)REJECT LIMIT UNLIMITED;';
END;
/
EXEC LOAD('C:\Users\external_table_new');
但这不起作用,我收到此错误
exec load
Error report -
ORA-00922: missing or invalid option
ORA-06512: at "SYSTEM.LOAD", line 7
ORA-06512: at line 1
00922. 00000 - "missing or invalid option"
*Cause:
*Action:
oracle立即执行。任何人都可以帮忙吗?我希望通过传递参数来运行过程时动态添加目录名称。
答案 0 :(得分:1)
动态SQL语句不应以分号结束。从执行立即执行中的;
语句中删除最后一个create table
。
您可能还想研究使用替代引用语法。这将允许您包含动态SQL,而不必进行转义。
例如:
execute immediate q'[
create table dummy ...
...
badfile ext_tab_data:'bad_file.bad'
...
)REJECT LIMIT UNLIMITED
]';