2015-01-07 46 views
1

我有一些在where子句中使用相同id的serveral查詢。目前,我有將id列表傳遞給幾個查詢

查詢1

select * from X ....... where id in (1,2,3); 

查詢2

select * from Y ....... where id in (1,2,3); 

等等等等

我想有是

查詢1

DEFINE VAR LIST; 
VAR = (1,2,3) 
select * from X ....... where id in (MY_VAR); 
select * from Y ....... where id in (MY_VAR); 

這將意味着如果我更改ID我不會在兩個地方更新。

我試過上面的但是它的錯誤。我的語法怎麼樣?

在此先感謝

回答

2

在SQL此外,SQL開發人員等:

SQL> define list = 1,2,3 
SQL> select * from x where id in (&list.); 

     ID 
---------- 
     1 
     2 
     3 
+0

完美夏季。我有很多IDS。作爲一個補充問題,我如何將定義分爲兩行?這可能嗎?感謝您的幫助 – RNJ

+0

[documentation](http://docs.oracle.com/cd/B19306_01/server.102/b14357/ch12017.htm)建議您可以在行尾加「 - 」但是當我剛剛嘗試時它不起作用。 –

0

你可以嘗試以下操作:

WITH list_values AS (
    SELECT TO_NUMBER(TRIM(REGEXP_SUBSTR('1,2,3', '[^,]+', 1, LEVEL))) AS id 
     FROM dual 
    CONNECT BY INSTR('1,2,3', ',', 1, LEVEL - 1) > 0 
) SELECT x.* FROM x, list_values 
    WHERE x.id = list_values.id; 

這可能是值得采取上述子查詢和用它創建一個臨時表,然後簡單地使用該表向前移動。除此之外,它將允許您在列表中擁有超過1000個ID。