使用项目中的新值到我的 sql 语句而不将此值保存到数据库

问题描述

我正在尝试将刚刚在我的项目中输入的日期值 (:P2007_Session_Date -它是一个日期选择器-) 与我的表中的日期值进行比较。这个新值尚未保存在我的数据库中。 我怎样才能做到这一点? 我正在尝试使用 DA,但没有任何反应

什么时候:

事件:变更,项目:P2007_Session_date

True Action Set Value:

sql 语句

选择政策.价格 来自政策 哪里政策.ACTIVE = 1 AND to_char(**:P2007_Session_Date**,'YYYY-MM-DD') BETWEEN to_char(POLICIES.START_DATE,'YYYY-MM-DD') AND to_char(POLICIES.END_DATE,'YYYY-MM-DD');

提交项目

:P2007_Session_Date,:P2007_Price

受影响的元素

:P2007_Price

这给了我这个错误 Ajax 调用返回服务器错误 ora-01722: 设置值不可接受的数字。 但是当我将查询从 to_char(:P2007_Session_Date,'YYYY-MM-DD') 更改为 to_char(sysdate,'YYYY-MM-DD') 时,它起作用了! 问题是我想检查的不是 sysdate,而是用户刚刚输入到 :P2007_Session_Date 项目的值,但它尚未存储在数据库中。

解决方法

Apex 项目是字符串,无论它们代表什么数据类型。因此,如果页面项中有日期值,则必须将其转换为 pl/sql 中的日期。语句 TO_CHAR(:P2007_SESSION_DATE,'YYYY-MM-DD') 不正确,它期望绑定变量 :P2007_SESSION_DATE 的数据类型为 DATE 或 TIMESTAMP,但由于这是一个顶点项,因此它只是一个字符串。

最简洁的解决方案是只进行日期比较,而不是字符比较(这对您的情况有效)。

试试这个语句:

SELECT
  policies.price
  FROM
  policies
 WHERE
  policies.active = 1 AND
  TO_DATE (:P2007_SESSION_DATE,'YYYY-MM-DD' ) BETWEEN policies.start_date AND policies.end_date