SQL Plus - 根据用户输入运行查询

时间:2014-02-23 14:21:53

标签: sql oracle11g sqlplus

我经常每天使用一个查询。我通常在一天中使用where子句中的不同条件多次运行同一个查询。

鉴于下表:

columnA columnB columnC columnD
1         2         3     4
5         6         7     8
9         9         9     9

当我运行查询时,我通常会修改where子句以根据特定列获取结果。有时我会说'where columnA=1'或我会将其更改为where columnB=3'

为了避免每次都重新键入查询,我决定在SQL plus脚本中编写脚本。

要运行脚本,我想按如下方式运行它:

> @myScript columnA 3
or
> @myScript columnC 7

这是我到目前为止所拥有的:

define searchColumn=&&1
define searchParam=&&2

Select columnA, columnB, columnC,columnD
from myTable t
where t.'&searchColumn' in ('&searchParam')

由于抱怨t.'&searchColumn',上述内容尚未奏效。如何在包含前缀的where子句中构建表名。

此外,如果您有类似的经历,每天都有一组常见的查询,我很想知道您如何使用它们来让您的生活更轻松。如果有更好的解决方案,请告诉我。

由于

1 个答案:

答案 0 :(得分:1)

尝试:

Select columnA, columnB, columnC, columnD
from myTable t
where t.&searchColumn in ('&searchParam')

此外,如果他们要输入替换值,您不需要提前定义它们。

我会将“IN”更改为“=”

或者,如果他们需要输入多个值来搜索:

Select columnA, columnB, columnC,columnD
from myTable t
where t.&searchColumn in (&searchParam)

但他们必须有正确的输入,例如:

'字符串', '字符串1'

2010,2011

如果您希望他们能够使用DEFINE将替换值键入文件(在顶部),那么您可以这样做:

define searchColumn = column_name_here
define searchParam = search_term_here

Select columnA, columnB, columnC,columnD
from myTable t
where t.&searchColumn in ('&searchParam')

同样,您可能希望将IN更改为=

另一方面,如果未定义替代变量,将提示用户输入该变量。因此,这取决于您是否希望每次运行时都提示它们输入,或者您希望它们能够在运行之前在脚本顶部定义变量。