在Oracle SQL中使用包含列表的变量的最佳方法

时间:2016-09-22 14:53:03

标签: sql oracle list variables

我有大约5个长SQL查询,并希望用变量替换一些值,所以我可以直接在顶部的脚本中输入它们(没有弹出窗口)。

实现这一目标的最佳方法是什么(现在是使这个问题不重复的部分),这样我也可以拥有列表变量。例如,以下是配置1和2之间的查询应该如何不同:

WHERE TRD_SRC_SYS ='blabla1'  
WHERE TRD_SRC_SYS ='blabla223' 

Select  'blabla1- NEW' as REC_SYSTEM,
Select  'blabla223- NEW' as REC_SYSTEM,

WHERE TRD_SRC_SYS in ('MAG','LLELLE')
WHERE TRD_SRC_SYS ='MA'  

独立于此我还想在一个地方设置日期,所以我不必在查询中出现的任何地方更改它。 (但我相信这在其他帖子中有解释)

任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:1)

您可以使用替换变量,如:

Client                                             Total Billable
------------------------- ---------------------------------------
Whale Mart                                               19868.75
Flitter                                                     11271
Acme Corp.                                               9067.375
Flitter                                                      8625
Astro Electric.                                              5500
Acme Corp.                                                   4000
Lighting Unlimited                                           3675
Whale Mart                                                   3200
ABM Systems                                               3106.75
Whale Mart                                                   2900
ABC Logistics                                                2600
Acme Corp.                                                   2475
Astro Electric                                               2312
Flitter                                                      1845
ABM Systems                                                  1005
ABC Logistics                                                 900
Speedy Messengers                                             375
ABC Logistics                                                 345
Durham Tiles                                                  300
ABM Systems                                                   160

 20 rows selected 

然后编写如下的查询:

define sys_list = "'MAG','LLELLE'"

它将解决:

... where TRD_SRC_SYS in (&sys_list.)

当你只需要一个值时:

... where TRD_SRC_SYS in ('MAG','LLELLE')

...查询将解析为

define sys_list = "'MA'"

表示与

相同
... where TRD_SYS in ('MA')

脚本示例

... where TRD_SYS = 'MA'

创建一个名为script.sql的脚本,其内容为:

SQL> select * from t1;

TRD_SRC_SYS
------------------------------
MA
MAG
LLELLE

使用不同的参数运行脚本:

select * from t1
where TRD_SRC_SYS in (&1.);