2014-11-03 71 views
0

我有一個文件,其中我有員工ID和每個員工ID號都不相同,這意味着文件中員工ID的計數每次都是不同的。示例:如何將參數從文件傳遞到unix中的sqlplus

343535435 
365765767 
343534543 
343543543 

我想將此文件傳遞給sqlplus。

的SQL命令是

SELECT * FROM TABLENAME WHERE EMPLYOE_ID IN (ALL RECORDS FROM ABOVE FILE) 

,我通過

$ sqlplus -s user/[email protected] @.sql 

調用從UNIX這個.sql文件,請讓我們知道如何可以在UNIX通過上述文件名在sqlplus。

回答

0

你最好的選擇是使用SQL * Loader的或外部表加載該文件到工作表,在下面的例子中名爲work_table,然後做一個

SELECT * FROM TABLENAME WHERE EMPLYOE_ID IN (select EMPLYOE_ID from work_table); 

或者,如果你不這樣做有時間也沒有耐心去做,如果你能控制輸入文件格式,只需在每個員工ID結尾之後加一個逗號(除了最後一個)(假設你總共少於256個ID),並假設文件在當前目錄中被命名爲emp_input.txt

SELECT * FROM TABLENAME WHERE EMPLYOE_ID IN (
    @@emp_input.txt 
); 

如果文件與正在運行的腳本位於同一目錄中,則emp_input.txt的內容通過@@嵌入;在這種情況下,您可能只需使用一個@字符。

如果不管是誰創建的輸入文件並不想省略對文件中的最後一個條目的逗號,那麼你可以在查詢中包括一個虛假的值將佔到後面的逗號:

SELECT * FROM TABLENAME WHERE EMPLYOE_ID IN (
    @@emp_input.txt 
    -999999 
); 
+0

嗨,馬克,我沒有訪問數據庫來創建外部表,我們只有讀取權限 – 2014-11-04 00:26:02

+0

然後你可以使用上面的例子,如果你有控制輸入文件。如果您使用單個「@」字符,則可以使用文件的完整路徑: @/home/user/emp_ids.txt – 2014-11-04 01:26:38

+0

嗨,馬克,我使用@但它給出錯誤,缺少表達式,我同時使用@@或@的方式,同樣的錯誤 – 2014-11-04 10:52:25

相關問題