sql - 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...
这样的事情可能吗?
解决方案
使用动态 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
这种方法总是比任何针对同一问题的动态解决方案更稳健、更有效。
推荐阅读
- node.js - 我使用 alamofire 解析 json 来注册,我使用 mysql 数据库
- windows - Pyautogui 和 pyscreez 因 windll.user32.ReleaseDC 崩溃而失败
- lua - 我需要帮助或至少在我正在玩的游戏中遇到碰撞指针
- mysql - How to inner join two tables?
- javascript - 表单重定向到链接
- sql - Could the Runtime Exception (column list_id does not exist) come from left join?
- css - 如何使ui-float-label居中
- reactjs - Call API Every X Seconds in React Function Component
- java - Why does vavr's Try container catches Throwable but not Exception?
- c++ - decltype(function) 的类型是什么,为什么我在这里不需要“const”限定符?