【问题标题】:Dynamic Comparison Operator in OracleOracle 中的动态比较运算符
【发布时间】:2021-12-04 01:29:44
【问题描述】:

有没有办法在 Oracle PL/SQL 中使用动态比较运算符?我有一个看起来像这样的while循环......

WHILE counter > workingDays
LOOP...

我正在简化一点,但如果今天是周末,我希望 > 实际上是 >=。有没有办法在 PL/SQL 中使用动态比较运算符?这不起作用,但是像这样......

operator := '>';

IF TO_CHAR( curDate, 'D') IN (1,7) THEN operator = '>=';

WHILE counter operator workingDays
LOOP...

这样的事情可能吗?

【问题讨论】:

    标签: sql oracle plsql


    【解决方案1】:

    有可能,使用动态 SQL;但你不是把事情复杂化了吗?

    为什么要使用动态运算符,而不是使用标准布尔运算符来构建条件?类似的东西

    counter > workingDays or (<<sysdate is a weekend>> and counter = workingDays)
    

    (我使用了一些伪代码 - 我假设您知道如何在 sysdate 上编写条件。)

    或者使用case 表达式:

    counter > workingDays - case when <<sysdate is a weekend>> then 1 else 0 end
    

    这种方法总是比任何针对同一问题的动态解决方案更稳健、更有效。

    【讨论】:

      猜你喜欢
      • 2011-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多