在Oracle SQL中将代码列表存储到变量中

在Oracle SQL中将代码列表存储到变量中,sql,oracle,oracle-sqldeveloper,Sql,Oracle,Oracle Sqldeveloper,有一种方法可以将一组代码存储到Oracle SQL中的变量中 我有这些代码,我需要在查询的不同部分使用它们 但我不会在SQL代码的许多地方重复这个列表 'G31', 'G310', 'G311', 'G312', 'G318', 'G319', 'G239', 'G122', 'G710', 'B20', 'B22', 'B23', 'B24', 'G35', 'C811', 'G37', 'G375', 'K702', 'K741' 我想做一些类似于这个想法的事情: LIST &l

有一种方法可以将一组代码存储到Oracle SQL中的变量中

我有这些代码,我需要在查询的不同部分使用它们

但我不会在SQL代码的许多地方重复这个列表

'G31', 'G310', 'G311', 'G312', 'G318', 'G319', 'G239', 'G122', 'G710',
     'B20', 'B22', 'B23', 'B24', 'G35', 'C811', 'G37', 'G375', 'K702', 'K741'
我想做一些类似于这个想法的事情:

LIST <- ['G31', 'G310', 'G311', 'G312', 'G318', 'G319', 'G239', 'G122', 'G710',
         'B20', 'B22', 'B23', 'B24', 'G35', 'C811', 'G37', 'G375', 'K702', 'K741']

SELECT * FROM TABLE_A where COLUMN IN [LIST];

SELECT * FROM TABLE_B where COLUMN IN [LIST];

LIST一种奇特的方法是

WITH CODE_VALUES AS 
  ( SELECT DISTINCT COLUMN_VALUE AS CODE_VALUE
      FROM TABLE (sys.dbms_debug_vc2coll ('G31',
                                      'G310',
                                      'G311',
                                      'G312',
                                      'G318',
                                      'G319',
                                      'G239',
                                      'G122',
                                      'G710',
                                      'B20',
                                      'B22',
                                      'B23',
                                      'B24',
                                      'G35',
                                      'C811',
                                      'G37',
                                      'G375',
                                      'K702',
                                      'K741'))
  )
  SELECT *
    FROM CODE_VALUES -- + the rest of your query
你也可以在连续的工会反对“双重”时做同样的事情


如果要在多个操作查询中使用此方法,最好将它们存储在一个表中。

一种奇特的方法就是这样

WITH CODE_VALUES AS 
  ( SELECT DISTINCT COLUMN_VALUE AS CODE_VALUE
      FROM TABLE (sys.dbms_debug_vc2coll ('G31',
                                      'G310',
                                      'G311',
                                      'G312',
                                      'G318',
                                      'G319',
                                      'G239',
                                      'G122',
                                      'G710',
                                      'B20',
                                      'B22',
                                      'B23',
                                      'B24',
                                      'G35',
                                      'C811',
                                      'G37',
                                      'G375',
                                      'K702',
                                      'K741'))
  )
  SELECT *
    FROM CODE_VALUES -- + the rest of your query
你也可以在连续的工会反对“双重”时做同样的事情


如果要在多个操作查询中使用它,最好将它们存储在一个表中。

创建一个
全局临时表
一次,并在gtt中添加所需的值,然后使用
连接在查询中使用它

gtt的好处是您不必担心数据维护。(删除-插入)。在一个会话/事务中添加的数据将仅在该会话/事务中可见(基于您创建的gtt类型)

Create global temporary table gtt
(Col1 varchar2(10))
On commit preserve row; -- session specific

Insert into gtt
Select 'G31' from dual union all
Select 'G310' from dual union all
...
...
Select 'K741' from dual;
现在,您可以在同一会话中的任何位置使用它,如下所示:

SELECT * 
FROM TABLE_A a
Join gtt g on a.COLUMN = g.col1;

SELECT * 
FROM TABLE_B b
Join gtt g on b.COLUMN = g.col1;

创建一个
全局临时表
,在gtt中添加所需的值,然后使用
join
在查询中使用它

gtt
的好处是您不必担心数据维护。(删除-插入)。在一个会话/事务中添加的数据将仅在该会话/事务中可见(基于您创建的gtt类型)

Create global temporary table gtt
(Col1 varchar2(10))
On commit preserve row; -- session specific

Insert into gtt
Select 'G31' from dual union all
Select 'G310' from dual union all
...
...
Select 'K741' from dual;
现在,您可以在同一会话中的任何位置使用它,如下所示:

SELECT * 
FROM TABLE_A a
Join gtt g on a.COLUMN = g.col1;

SELECT * 
FROM TABLE_B b
Join gtt g on b.COLUMN = g.col1;

您可以将它们放在一个表中,然后连接到该表或对其进行子查询。我希望数据库中会有一个查找表来定义所有可能的代码。如果您有要查找一组不同代码的查询,这强烈地意味着应该将某个属性定义为该查找表的一列ich您的查询可以参考。因此,如果这些都是冰淇淋口味的代码,并且您有一个用于过敏查询的所有涉及花生的代码的列表,那么将
has_peanuts
标志添加到
冰淇淋
表中(其中存储了所有可能的代码)。什么是“SQL代码”?SQL是一个查询l语言,它并不像你的例子中那样真的有变量。PL/SQL有变量,因为它是一种编程语言,但这是一个完全不同的问题。你可以把它们放在一个表中,然后连接到它或子查询它。我希望在数据库中有一个查找表,定义所有可能的代码。如果你想在哪里查询,就在哪里查询要查找一组不同的代码,这强烈地意味着有一些属性应该被定义为查询可以引用的查询表的列。因此,如果这些都是冰淇淋口味的代码,并且您有一个用于过敏查询的所有涉及花生的代码的列表,那么将
has_peanuts
标志添加到
ice_cream
表中,在该表中存储所有可能的代码。“SQL代码”是什么?SQL是一种查询语言,它实际上并不像您的示例中那样有变量。PL/SQL之所以有变量,是因为它是一种编程语言,但这是一个完全不同的问题。