动态替代变量
Posted
技术标签:
【中文标题】动态替代变量【英文标题】:Dynamic substitute variable 【发布时间】:2020-03-05 14:41:25 【问题描述】:我正在寻找替代变量是否可能是“动态的”。
例如,我想为可重复的脚本使用弹出窗口,提示用户输入两个变量:颜色和数字。但是,即使用户没有输入一个变量,我也需要脚本仍然运行。换句话说,如果留空,它会将变量设置为 IS NOT NULL。
这可能吗?
select user
from table
where colour = '&colour'
and number = &number
【问题讨论】:
【参考方案1】:这并不是 Oracle 真正打算做的事情(替换变量通常只是为了快速的临时事情,应该在前端处理严肃的报告)。
作为一个小技巧,你可以做这样的事情:
select user
from table
where (colour = '&&colour' OR '&&colour' IS NULL)
and (number = to_number('&&number') OR to_number('&&number') IS NULL);
顺便说一句,我有点惊讶地发现空字符串在 Oracle 中被视为NULL
。
显然,'' IS NULL
的计算结果为真,'' = ''
的计算结果为假(这是有道理的,因为对 NULL
的任何相等性检查都是假的)
【讨论】:
如果您use&&
instead of &
,系统只会提示您输入变量一次。 (此外,文档有 a section about nulls 涵盖了您的最后两段 *8-)
@AlexPoole 谢谢,我将其添加到答案中(我正在使用 PL/SQL Developer,这是单个 &
的默认行为)【参考方案2】:
对于这类查询,我总是使用 nvl 函数;示例如下:
select user
from table
where colour = nvl('&colour', colour)
and number = nvl(&number,number)
;
【讨论】:
以上是关于动态替代变量的主要内容,如果未能解决你的问题,请参考以下文章