确定在SQL Developer中使用哪个列表的提示?



我有一组经常运行脚本的用户。我为他们编写这些脚本,并通常提示他们输入一个变量。我对此很熟悉。然而,我最近写了一个脚本,并对它进行了多次迭代,只改变了一件事:一个列表(EXISTS IN (x, y, z)在脚本1中,EXISTS IN (a,b,c)在脚本2中)。有没有一种方法可以提示我的用户选择他们想要运行的列表,这样我就可以简化他们的脚本?

代码,为保护隐私而简化:

SELECT firstname, lastname
FROM tablename
WHERE somecolumn = &CodeNumber
AND EXISTS (
SELECT 1
FROM table2 
WHERE anothercolumn = somecolumn
AND anotherCode IN ('A','B','C') 
)

现在,该脚本有一个提示代码编号,但我也想提示什么列表"anotherCode"将是(例如(a,b,c)或(x,y,z),尽管现实中有更多)

我想做一个这样的提示:

accept runOption char format A1 prompt 'Type 1 for (a,b,c) or 2 for (x,y,z) '

但是即使我有了运行选项,我也不知道如何"翻译"。到名单上。想法吗?TYIA .

SQL Developer 22.2.0.173甲骨文19 c

如果您不介意在代码中重复参数,您可以使用布尔逻辑:

where 
( 
( &runOption = 1 and somecolumn in ('a', 'b', 'c') )
or ( &runOption = 2 and somecolumn in ('d', 'e', 'f') )
) 
and exists (
...
)

可能会提示两次。您可以使用绑定变量,只让SQLDeveloper提示一次。或者我们可以使用case表达式:

where 
1 = case &runOption
when 1 then case when somecolumn in ('a', 'b', 'c') then 1 end
when 2 then case when somecolumn in ('d', 'e', 'f') then 1 end
end 
and exists (
...
)

最新更新