Sql 有条件地引用Oracle APEX中的复选框值 案例 时间:P6_TASK3_DEP='task2' 和:P6_T3_开始日期

Sql 有条件地引用Oracle APEX中的复选框值 案例 时间:P6_TASK3_DEP='task2' 和:P6_T3_开始日期,sql,oracle,oracle-apex,Sql,Oracle,Oracle Apex,我这里有一个语句试图有条件地引用复选框中的值(任务1,任务2)。每次我都会看到else语句,但我似乎不知道如何正确引用复选框中的值。因为在CASE..WHEN语句中需要一个布尔表达式 这部分 CASE WHEN :P6_TASK3_DEP = 'Task 2' AND :P6_T3_STARTDATE < :P6_T2_DUEDATE THEN :P6_T3_STARTDATE = :P6_T2_DUEDATE WHEN :P6_TASK3_DEP = 'Tas

我这里有一个语句试图有条件地引用复选框中的值(任务1,任务2)。每次我都会看到else语句,但我似乎不知道如何正确引用复选框中的值。

因为在
CASE..WHEN
语句中需要一个布尔表达式

这部分

CASE
  WHEN :P6_TASK3_DEP = 'Task 2' 
   AND :P6_T3_STARTDATE < :P6_T2_DUEDATE 
  THEN
   :P6_T3_STARTDATE = :P6_T2_DUEDATE
  WHEN :P6_TASK3_DEP = 'Task 1' 
   AND :P6_T3_STARTDATE < :P6_T1_DUEDATE 
  THEN
   :P6_T1_DUEDATE
  WHEN :P6_TASK3_DEP = 'Task 1' 
   AND :P6_TASK3_DEP = 'Task 2' 
   AND :P6_T2_DUEDATE > :P6_T1_DUEDATE 
  THEN
   :P6_T2_DUEDATE
  WHEN :P6_TASK3_DEP = 'Task 1' 
   AND :P6_TASK3_DEP = 'Task 2' 
   AND :P6_T2_DUEDATE < :P6_T1_DUEDATE 
  THEN
   :P6_T1_DUEDATE
  ELSE
   'Not Working ' || :P6_T3_STARTDATE
 END
当:P6_TASK3_DEP='task2'和:P6_T3_STARTDATE<:P6_T2_DUEDATE时
:P6\u T3\u开始日期=:P6\u T2\u结束日期
违反此规则的是赋值,而不是布尔表达式。这可能会转化为

 WHEN :P6_TASK3_DEP = 'Task 2' AND :P6_T3_STARTDATE < :P6_T2_DUEDATE THEN
           :P6_T3_STARTDATE = :P6_T2_DUEDATE
当:P6_TASK3_DEP='task2'和:P6_T3_STARTDATE<:P6_T2_DUEDATE时
:P6_T2_截止日期

相反。

在不知道会话中页面项目的实际值的情况下,这只是猜测,但我想尝试一下:

WHEN :P6_TASK3_DEP = 'Task 2' AND :P6_T3_STARTDATE < :P6_T2_DUEDATE THEN
          :P6_T2_DUEDATE
案例
时间:P6_TASK3_DEP='task2'
截止日期(:P6_T3_STARTDATE,'DD-MON-YYYY')<截止日期(:P6_T2_DUEDATE,'DD-MON-YYYY'))
然后
“布尔_在这里”
时间:P6_TASK3_DEP='Task 1'
截止日期(:P6\u T3\u STARTDATE,'DD-MON-YYYY')<截止日期(:P6\u T1\u DUEDATE,'DD-MON-YYYY'))
然后
:P6\u T1\u截止日期
时间:P6_TASK3_DEP='Task 1'
和:P6_TASK3_DEP='task2'
截止日期(:P6\u T2\u DUEDATE,'DD-MON-YYYY')>截止日期(:P6\u T1\u DUEDATE,'DD-MON-YYYY'))
然后
:P6_T2_截止日期
时间:P6_TASK3_DEP='Task 1'
和:P6_TASK3_DEP='task2'
截止日期(:P6\u T2\u DUEDATE,'DD-MON-YYYY')<截止日期(:P6\u T1\u DUEDATE,'DD-MON-YYYY'))
然后
:P6\u T1\u截止日期
其他的
“不工作”:P6_T3_开始日期
结束
apex中的所有页面项在pl/sql中都被视为字符串,因此如果要进行日期比较,必须告诉db您是在比较日期,而不是字符串。你可以做一个约会。我假设您的日期格式掩码为“DD-MON-YYYY”,但如果不是,您应该将其更改为您自己的日期格式掩码


正如@BarbarosÖzhan指出的,第一个
THEN
子句包含一个运算符,因此我将其替换为“boolean_here”。

会话中每个页面项的值是什么?我们应该看到完整的语句。这是在SQL语句中还是在PL/SQL代码块中,它的周长是多少@游戏鸡20。我的意思是,你在最后给哪个参数赋值。
CASE
  WHEN :P6_TASK3_DEP = 'Task 2' 
   AND TO_DATE(:P6_T3_STARTDATE,'DD-MON-YYYY') < TO_DATE(:P6_T2_DUEDATE ,'DD-MON-YYYY')
  THEN
   'boolean_here'
  WHEN :P6_TASK3_DEP = 'Task 1' 
   AND TO_DATE(:P6_T3_STARTDATE,'DD-MON-YYYY') < TO_DATE(:P6_T1_DUEDATE,'DD-MON-YYYY') 
  THEN
   :P6_T1_DUEDATE
  WHEN :P6_TASK3_DEP = 'Task 1' 
   AND :P6_TASK3_DEP = 'Task 2' 
   AND TO_DATE(:P6_T2_DUEDATE,'DD-MON-YYYY') > TO_DATE(:P6_T1_DUEDATE,'DD-MON-YYYY') 
  THEN
   :P6_T2_DUEDATE
  WHEN :P6_TASK3_DEP = 'Task 1' 
   AND :P6_TASK3_DEP = 'Task 2' 
   AND TO_DATE(:P6_T2_DUEDATE,'DD-MON-YYYY') < TO_DATE(:P6_T1_DUEDATE,'DD-MON-YYYY') 
  THEN
   :P6_T1_DUEDATE
  ELSE
   'Not Working ' || :P6_T3_STARTDATE
 END