-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関数を使用する必要がありました( 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 に答える