将代码列表存储到 Oracle 中的变量中 SQL
Storing a list of codes into a variable in Oracle SQL
有一种方法可以将一组代码存储到 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];
这是一个奇特的方法
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 'ABC' AS code_value FROM dual UNION
SELECT 'CDE' AS code_value FROM dual
)
如果这将在多个操作查询中使用,最好将它们存储在 table.
中
创建一次 global temporary table
并在 gtt 中添加所需的值,然后在使用 join
的查询中使用它。
gtt
的好处是您不必担心数据维护。 (删除 - 插入)。添加到一个 session/transaction 中的数据将仅在 session/transaction 中可见(基于您创建的 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;
有一种方法可以将一组代码存储到 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];
这是一个奇特的方法
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 'ABC' AS code_value FROM dual UNION
SELECT 'CDE' AS code_value FROM dual
)
如果这将在多个操作查询中使用,最好将它们存储在 table.
中创建一次 global temporary table
并在 gtt 中添加所需的值,然后在使用 join
的查询中使用它。
gtt
的好处是您不必担心数据维护。 (删除 - 插入)。添加到一个 session/transaction 中的数据将仅在 session/transaction 中可见(基于您创建的 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;