首页 > 解决方案 > Oracle中的动态比较运算符

问题描述

有没有办法在 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...

这样的事情可能吗?

标签: sqloracleplsql

解决方案


使用动态 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

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


推荐阅读