-1

我尝试将一些数据从 csv 导入到表中。csv 位于服务器上,我尝试将其复制到外部表以将其内容复制到主数据表。如果没有此错误,我什至无法保存代码:

PLS-00103:在预期以下之一时遇到符号“EXTERNAL”::=。(@%;

它在 SQL Developer 中运行良好。

BEGIN
  EXECUTE IMMEDIATE'
  CREATE TABLE  "MY_TABLE_CSV" 
   (    "C1" VARCHAR2(255), 
    "C2" VARCHAR2(255), 
    "C3" VARCHAR2(255), 
    "C4" VARCHAR2(255), 
    "C5" VARCHAR2(255), 
    "C6" VARCHAR2(255), 
    "C7" VARCHAR2(255), 
    "C8" VARCHAR2(255), 
    "C9" VARCHAR2(255), 
    "C10" VARCHAR2(255), 
    "C11" VARCHAR2(255), 
    "C12" VARCHAR2(255), 
    "C13" VARCHAR2(255), 
    "C14" VARCHAR2(255), 
    "C15" VARCHAR2(255), 
    "C16" VARCHAR2(255), 
    "C17" VARCHAR2(255), 
    "C18" VARCHAR2(255), 
    "C19" VARCHAR2(255), 
    "C20" VARCHAR2(255)
   )';
   ORGANIZATION EXTERNAL
   (
     TYPE ORACLE_LOADER
     DEFAULT DIRECTORY SOME_FOLDER
     ACCESS PARAMETERS (
       records delimited BY newline
       fields terminated BY ';'
       optionally enclosed BY '"'
       lrtrim
       missing field VALUES are NULL
     )
   LOCATION ('foo.csv')
   );
END;

我工作的服务器在 Apex 4.2.2 上运行。

我已经尝试将其放入匿名块中。

提前致谢!

编辑:我之前也尝试过删除表格,甚至不创建表格,而只是删除它的内容。它永远不会起作用。

EDIT2:我更新了代码。和错误消息。

4

2 回答 2

1

我不得不使用该EXECUTE IMMEDIATE功能(Link To Oracle Docs)。我什至不得不使用'q'来确定“'”是引用。
工作代码现在看起来像这样:

BEGIN
  EXECUTE IMMEDIATE q'!
  CREATE TABLE  "MY_TABLE_CSV" 
   (    "C1" VARCHAR2(255), 
    "C2" VARCHAR2(255), 
    "C3" VARCHAR2(255), 
    "C4" VARCHAR2(255), 
    "C5" VARCHAR2(255), 
    "C6" VARCHAR2(255), 
    "C7" VARCHAR2(255), 
    "C8" VARCHAR2(255), 
    "C9" VARCHAR2(255), 
    "C10" VARCHAR2(255), 
    "C11" VARCHAR2(255), 
    "C12" VARCHAR2(255), 
    "C13" VARCHAR2(255), 
    "C14" VARCHAR2(255), 
    "C15" VARCHAR2(255), 
    "C16" VARCHAR2(255), 
    "C17" VARCHAR2(255), 
    "C18" VARCHAR2(255), 
    "C19" VARCHAR2(255), 
    "C20" VARCHAR2(255)
   )
   ORGANIZATION EXTERNAL
   (
     TYPE ORACLE_LOADER
     DEFAULT DIRECTORY SOME_FOLDER
     ACCESS PARAMETERS (
       records delimited BY newline
       fields terminated BY ';'
       optionally enclosed BY '"'
       lrtrim
       missing field VALUES are NULL
     )
   LOCATION ('foo.csv')
   )!';
END;

编辑:我每次都需要创建表,因为传入 *.csv 的数量是可变的。

于 2013-06-04T06:44:40.150 回答
0

为什么每次都想(重新)创建这个?当您创建了一个外部表定义时,您已设置:当您对其执行选择时,它所需要的只是一个文件。例如,如果文件在一夜之间发生更改,外部表仍然可以工作。

至于你第一个错误的原因:CREATE TABLE是DDL。你不能把它放在 PL/SQL 块中。

于 2013-06-03T14:59:42.547 回答