1

単一の外部テーブル命令を PLSQL プロシージャに変換する際に問題が発生しています。特に、これは完全に機能する外部テーブル作成命令です。

create table TMP_TBL (
  id VARCHAR2(10)
)
organization external (
  TYPE ORACLE_LOADER
  default directory DATA_DIR
  access parameters (
    RECORDS DELIMITED BY NEWLINE
    fields terminated by '|'
    missing field values are null
  )
  location ('test.txt')
)
reject limit unlimited;

外部データファイルを指定してテーブルを作成する PLSQL プロシージャを作成しようとしています。これは私が今までやってきたことですが、それを呼び出すときにまだ問題があります。

PROCEDURE CREATE_TMP_TBL(FILENAME VARCHAR2) IS
  BEGIN
    EXECUTE IMMEDIATE 'create table TMP_TBL (
      id VARCHAR2(10)
    )
    organization external (
      type oracle_loader
      default directory DATA_DIR
      access parameters (
        records delimited by newline
        fields terminated by ''|''
        missing field values are null
      )
      location ('''||FILENAME||''')
    )
    reject limit unlimited;';
  END CREATE_TMP_TBL;

次のコマンドで手順を実行します。

exec pkg_load.CREATE_TMP_TBL('test.txt');

それは私にこのエラーを与えます:

Error report:
ORA-00911: invalid character
ORA-06512: at "PKG_LOAD", line 43
ORA-06512: at line 1
00911. 00000 -  "invalid character"
*Cause:    identifiers may not start with any ASCII character other than
           letters and numbers.  $#_ are also allowed after the first
           character.  Identifiers enclosed by doublequotes may contain
           any character other than a doublequote.  Alternative quotes
           (q'#...#') cannot use spaces, tabs, or carriage returns as
           delimiters.  For all other contexts, consult the SQL Language
           Reference Manual.
*Action:

行 43 は、プロシージャ CREATE_TMP_TBL の「BEGIN」番号行です。

情報:

Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production
PL/SQL Release 11.2.0.2.0 - Production
"CORE   11.2.0.2.0  Production"
TNS for Linux: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production

この問題を解決するための提案は大歓迎です。アドバイスありがとう、

カルロ

4

1 に答える 1

1

remove the semicolon from the end of the statement here:

reject limit unlimited;'; 

ie change to

reject limit unlimited';
于 2013-02-17T16:36:40.330 に答える