动态替代变量

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)
;

【讨论】:

以上是关于动态替代变量的主要内容,如果未能解决你的问题,请参考以下文章

安全关键项目中动态分配的替代方案 (C)

可以替代面向对象设计模式的功能或动态技术示例

需要对派生类进行动态转换:寻找替代方法

峰值查找算法 - 动态阈值或替代方法

Unisantis推出替代DRAM的动态闪存

使用 IDispatch 的 C++ 和 COM 的类似动态的替代方案