【问题标题】:Dynamic substitute variable动态替代变量
【发布时间】:2020-03-05 14:41:25
【问题描述】:

我正在寻找替代变量是否可能是“动态的”。

例如,我想为可重复的脚本使用弹出窗口,提示用户输入两个变量:颜色和数字。但是,即使用户没有输入一个变量,我也需要脚本仍然运行。换句话说,如果留空,它会将变量设置为 IS NOT NULL。

这可能吗?

select user
from table
where colour = '&colour'
and number = &number

【问题讨论】:

    标签: sql oracle sqlplus


    【解决方案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)
    ;
    

    【讨论】:

      猜你喜欢
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      • 2017-02-18
      • 2016-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多