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:
神諭立即執行。任何人都可以幫忙嗎?我希望在通過傳遞參數運行過程時動態添加目錄名稱。
創建目錄動態似乎是一個奇怪的要求。當你做'創建目錄...'時,該目錄的文件路徑必須可供服務器使用。你真的添加/更改可用於服務器的目錄嗎?通常,您可以創建少量目錄(例如,一個用於輸入文件,一個用於輸出等,或者一個用於typeA文件,另一個用於typeB文件等),然後將文件移動到相關目錄中。我很好奇你爲什麼需要在Oracle中動態創建目錄? – Boneist
謝謝你的答覆boneist ..ya這就是我想要的。在一個單獨的過程中是可能的,還是應該創建另一個過程(用於目錄)並從中調用該加載過程?因爲我無法將兩種說法都變成單一程序......所以你有什麼解決辦法! – steve
首先,不要在SYSTEM模式(或SYS)中創建對象等 - 您應該創建一個新的模式來執行此操作。 (我這樣說,因爲SYS和SYSTEM是「特殊」模式,你可能會從它們中獲得意想不到的副作用)。就目前來看,它看起來問題在於你的create table語句。 – Boneist