将ids列表传递给多个查询

时间:2015-01-07 16:22:53

标签: sql oracle oracle10g

我有几个查询在where子句中使用相同的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 个答案:

答案 0 :(得分:2)

在SQL Plus,SQL Developer等中:

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

        ID
----------
         1
         2
         3

答案 1 :(得分: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。