使用外部表格在下面的代码中出错

时间:2015-02-17 14:35:54

标签: sql oracle plsql

当我运行以下代码时,它会给我以下错误:

  

ORA-00905:缺少关键字
  ORA-06512:第4行

declare  
v_file varchar2(100):= 'samplefile.txt';  
begin  
execute immediate 'create table ext_tab2 (  
mprn char(10))  
ORGANIZATION EXTERNAL (  
  TYPE ORACLE_LOADER  
  DEFAULT DIRECTORY IMPORT  
    ACCESS PARAMETERS (  
    RECORDS DELIMITED BY NEWLINE  
    FIELDS TERMINATED BY '||','||'  
    (mprn char(10)))    
    LOCATION ('||v_file||')  
    ) 
    PARALLEL 5
REJECT LIMIT UNLIMITED';  
end;   

任何人都能告诉我错误在哪里吗?

1 个答案:

答案 0 :(得分:3)

您需要在逗号分隔符值周围包含转义引号:

FIELDS TERMINATED BY '''||','||'''

或稍微简单一点:

FIELDS TERMINATED BY '',''

以及文件名:

LOCATION ('''||v_file||''')

所以放在一起:

declare
v_file varchar2(100):= 'samplefile.txt';
begin
execute immediate 'create table ext_tab2 (
mprn char(10))
ORGANIZATION EXTERNAL (
TYPE ORACLE_LOADER
DEFAULT DIRECTORY IMPORT
ACCESS PARAMETERS (
RECORDS DELIMITED BY NEWLINE
FIELDS TERMINATED BY '''||','||'''
(mprn char(10)))
LOCATION ('''||v_file||''')
) PARALLEL 5 REJECT LIMIT UNLIMITED';
end;
/

anonymous block completed

desc ext_tab2

Name Null Type     
---- ---- -------- 
MPRN      CHAR(10) 

如果您有动态语句问题,那么显示生成的语句通常很有用(例如使用dbms_output);像缺失空格这样的简单错误通常更加明显,当它不那么明显时,您可以手动运行语句以获得更具体或有用的错误 - 指向SQL中错误的点,而不是{ {1}}。