0
私は、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:
オラクル、このエラーを取得しています誰でも助けてもらえますか?私は、プロシージャがパラメータを渡すことによって実行されるときにディレクトリ名を動的に追加したい。
は、ディレクトリの作成、動的に奇妙な要件と思われます。 'ディレクトリを作成... 'すると、ディレクトリのファイルパスがサーバで利用可能でなければなりません。あなたは本当にサーバーに利用できるディレクトリを追加/変更していますか?通常は、少数のディレクトリ(入力ファイル用、出力用など、またはタイプAファイル用、タイプBファイル用など)を作成し、関連するディレクトリにファイルを移動します。なぜOracleでディレクトリを動的に作成する必要があるのか不思議です。 – Boneist
感謝の骨子.. ..yaそれは私が望んだものです。単一のプロシージャで可能か、別のプロシージャ(ディレクトリ用)を作成し、このロードプロシージャを呼び出す必要がありますか?私は両方のステートメントを1つのプロシージャにexcecuteすることはできないので...あなたは解決策を持っていますか? – steve
まず、SYSTEMスキーマ(またはSYS)にオブジェクトなどを作成しないでください。これを行うための新しいスキーマを作成する必要があります。 (私はこれを言っています。なぜなら、SYSとSYSTEMは "特別な"スキーマなので、意図しない副作用が発生する可能性があります。それは、問題がcreate table文にあるように見えます。 – Boneist