2012-12-19 20 views
2

我需要幫助。我想使用名稱中包含sysdate的PL/SQL創建表?例如,table_name_sysdate?Oracle - PL/SQL:如何從外部表中的可更改文件名讀取?

我想創建一個外部表,它將讀取一個.csv文件和我想要讀取的文件名,它的名稱由常量(table_name)和日期(sysdate)組成。該文件名可根據日期每天更改。我不知道如何創建從每日可更改文件名加載的機制。

這是我的代碼,我不知道把什麼放在帶問號的括號內。

create table ext_table_1 
(med_name varchar2(20), 
cost integer) 
organization external 
(type ORACLE_LOADER 
default directory orders 
access parameters 
(records delimited by newline 
fields terminated by ',') 
location (???) 
reject limit 200; 

回答

1

這是對目錄對象的引用,使用「創建目錄」進行創建。

http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_5007.htm

+0

我知道該放什麼,但文件名可根據當前日期更改。我不知道如何讓它自動讀取文件名稱如下(file_DD_MM_YY) –

+1

好的,我明白了。您可以每天發出一個「alter table」命令來修改它要讀取的文件名,因爲文件名是基於系統日期的確定性的 –

+0

必須有一種方法可以自動完成。無論如何,謝謝你試圖幫助我。非常感激。上帝祝福你。 –

3

該文件在表的位置屬性指定。你可以用一個alter table語句更改它,就像這樣:

alter table log_files location ('prefix_20121219.csv'); 

因此,基本上,創造今天的文件表,然後就每天運行ALTER TABLE語句,在計劃的作業或類似的操作。

或者,您可以保持文件名稱爲靜態並將每天的文件重命名/複製到該名稱。如果您在11gR2上運行,您可以將預處理器文件(shell腳本)關聯起來,以便在查詢外部表時執行此操作。 Find out more

0

基本上你想要從外部CSV文件加載到表中,並且文件名包含一個時間戳,所以它的名稱每次都會更改。 外部腳本可以簡單地複製該文件(從文件名中提取時間戳,並檢查當前是否以正確格式匹配)到加載腳本所需的標準名稱。如果稍後需要原始文件,則在覆蓋之前,請先在備份目錄中創建該文件的副本。