如何在Oracle数据库中编写参数化查询

时间:2018-08-10 18:34:54

标签: sql oracle testing

我有一个基本要求,我需要使用相同的参数多次查询数据库 即

Select * from Table1 where ID1 in (1,2,3,4,5) ;
Select * from Table2 where ID2 in (1,2,3,4,5) ;
Select * from Table3 where ID3 in (1,2,3,4,5) ;
Select * from Table4 where ID4 in (1,2,3,4,5) ;
Select * from Table5 where ID5 in (1,2,3,4,5) ;

在这里我想要一些可以声明变量并分配值1,2,3,4,5的东西,而无需再次更改值,只需更改变量值即可。

类似..

Select * from Table1 where ID1 in (x,y,z,a,b);

这可能为您提出了一个非常基本的问题,但可以节省很多工作。

2 个答案:

答案 0 :(得分:2)

我认为您可能正在寻找类似的东西

if ENV['REMOTE_USER'] == 'foo'
  get "home" => 'app1#home'

elsif ENV['REMOTE_USER'] == 'bar'
  get "home" => 'app2#home'

end 

答案 1 :(得分:2)

在SQL * Developer中,将它们写为绑定变量,如下所示(例如):

SELECT count(*) FROM dba_objects WHERE rownum <= :v1;

SELECT count(*) FROM dba_tab_columns WHERE rownum <= :v1;

在您的特定情况下,可能是:

Select * from Table1 where ID1 in (:x,:y,:z,:a,:b); 

SQL * Developer将看到冒号并识别绑定变量,并提示您输入值。

即使在其他查询中,它也会在下次看到该值时记住该值。每次仍然会提示您,但是您使用的最后一个值将被填写。

如果要以编程方式指定变量值,则可以使用以下方法:

VARIABLE var1 NUMBER;

exec :var1 := 15;

SELECT count(*) FROM dba_objects WHERE rownum <= :var1;

SELECT count(*) FROM dba_views WHERE rownum <= :var1;

...但是您需要在SQL * Developer(F5键)中将其作为脚本运行。