2011-05-05 84 views
1

我正在爲oracle 10g在SQL中進行一些調試。我有一個很大的輸入字符串,用於「IN子句」,即輸入字符串到表

select * from table where col in ('str2','str3','str4','str5',...) 

我想將in子句轉換爲行或表? 有沒有辦法做到這一點,即

select 'str2','str3','str4','str5', .. from dual 

但這輸出多列,我想多行?

編輯:

這就是我要做的。假設我在tmp_table1中有一個excel數據(實際上不能創建),並且tmp_table1與IN子句相同,那麼下面的語句將給出缺少的鍵。

SELECT * 
    FROM tmp_table1 
WHERE unique_id NOT IN (
       SELECT unique_id 
       FROM table1 
       WHERE unique_id IN 
           ('str1', 'str2', 'str3', 'str4')) 

現在@安德烈·米solution工作如果字符串小於4000。但如果其更大?

回答

0

您可以UNION值成多行:

SELECT 'str2' AS col FROM dual 
UNION 
SELECT 'str3' FROM dual 
UNION 
SELECT 'str4' FROM dual 
UNION 
SELECT 'str5' FROM dual 
+0

謝謝,但正如我所說,我有一個很大的輸入,即大於或等於300輸入srings'str2','str3','str4','str5',...'str300'...工會看起來像很多工作:( – surya 2011-05-05 20:42:39

+0

我不知道輸入來自哪裏(外部程序,文本文件,鍵盤...)但是,您可以將值插入臨時表並加入它來過濾您的查詢 – 2011-05-05 21:26:24

+0

輸入來自excel文件,我複製並粘貼它們以形成in子句(通過將'\'替換爲',')我沒有創建臨時表的權限是否沒有其他方式? – surya 2011-05-05 21:52:13

2

您可能正在尋找this solution

+0

感謝這幾乎是我需要的。如何看起來像我的字符串是很長,因爲我得到「ORA-01704:字符串文字太長」錯誤 – surya 2011-05-06 19:35:34

+0

@spiderdevil - Oracle有4000個字符的字符串的絕對限制。如果這對於你來說還不夠,你需要一種不同的方法,一種使用PL/SQL。請編輯您的問題,向我們提供您想要實現的更多細節。 – APC 2011-05-07 11:45:31