有条件地引用 Oracle APEX 中的复选框值

Posted

技术标签:

【中文标题】有条件地引用 Oracle APEX 中的复选框值【英文标题】:Conditionally Referring to Checkbox Values in Oracle APEX 【发布时间】:2020-09-08 13:14:30 【问题描述】:
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

我在这里有这个语句试图有条件地引用复选框中的值(任务 1,任务 2)。我每次都使用 else 语句,但似乎无法弄清楚如何正确引用复选框中的值。

【问题讨论】:

会话中每个页面项的值是多少? 【参考方案1】:

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

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

apex 中的所有页面项目都被视为 pl/sql 中的字符串,因此如果您想进行日期比较,您必须告诉数据库您正在比较日期,而不是字符串。您可以通过执行 TO_DATE 来做到这一点。我假设您的日期格式掩码是“DD-MON-YYYY”,但如果不是,您应该将其更改为您自己的日期格式掩码。

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

【讨论】:

【参考方案2】:

因为您需要在 CASE..WHEN 语句中使用布尔表达式。

这部分

 WHEN :P6_TASK3_DEP = 'Task 2' AND :P6_T3_STARTDATE < :P6_T2_DUEDATE THEN
           :P6_T3_STARTDATE = :P6_T2_DUEDATE
违反这条规则的

是一个赋值,而不是一个boolean表达式。这可能会转换为

WHEN :P6_TASK3_DEP = 'Task 2' AND :P6_T3_STARTDATE < :P6_T2_DUEDATE THEN
          :P6_T2_DUEDATE

改为。

【讨论】:

我们应该看到完整的声明。那是在 SQL 语句中,还是在 PL/SQL 代码块中,它有什么圆周......? @Gamecocks20 。 我的意思是,你最后分配给哪个参数。

以上是关于有条件地引用 Oracle APEX 中的复选框值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Oracle Apex 应用程序中获取复选框值

Oracle Apex - 动态检查不在报告中的复选框项目

如何处理 Oracle APEX 报告中的复选框项目?

Oracle ApEx 复选框以在选中/未选中时操作其他值

ORACLE apex - 使用 PL/SQL 循环通过复选框项目

Oracle Apex 4.1 复选框更新穿梭