【问题标题】:add dates to a bind variable date field将日期添加到绑定变量日期字段
【发布时间】:2019-06-07 13:41:45
【问题描述】:

我们正在使用 oracle 12c 表单和报告。在其中一个查询中,用户将通过表单输入日期,下面提到的查询将获取所需的数据。

SELECT COUNT(*)
 FROM T_APPLICATION_HDR,T_APPLN_PENSIONER
 WHERE APPLN_PK=APEN_APPLN_PK
 AND APPLN_DATE <=:APPLN_DATE
 AND APPLN_SECN_ID ='PV1'
 AND APPLN_STAT='04'

我需要的是从上面的查询中获取的数据将在用户输入的日期之前。我想将用户输入的日期和基于该日期填充的记录添加 10 天。

我像这样修改了上面的查询

SELECT COUNT(*)
 FROM T_APPLICATION_HDR,T_APPLN_PENSIONER
 WHERE APPLN_PK=APEN_APPLN_PK
 AND APPLN_DATE <=:APPLN_DATE+10
 AND APPLN_SECN_ID ='PV1'
 AND APPLN_STAT='04' 

它给出了这个错误

ORA-00932: inconsistent datatypes: expected DATE got NUMBER.

如何修改这个查询

我像这样修改了上面的查询

SELECT COUNT(*)
 FROM T_APPLICATION_HDR,T_APPLN_PENSIONER
 WHERE APPLN_PK=APEN_APPLN_PK
 AND APPLN_DATE <=:APPLN_DATE+10
 AND APPLN_SECN_ID ='PV1'
 AND APPLN_STAT='04' 

例如,如果输入的appln_date10-may-2019,那么查询应该获取20-may-2019 之前的记录。

它给出了这个错误

ORA-00932: inconsistent datatypes: expected DATE got NUMBER.

如何修改这个查询

【问题讨论】:

  • 您修改查询的方式是正确的。其他原因导致此错误。有两件事要检查(并在检查后与我们分享):(1)表中APPLN_DATE 列的数据类型。 (几乎可以肯定date,否则即使在修改之前你也会得到同样的错误,但最好检查一下。) (2) 由应用程序创建并分配给查询中绑定变量的变量的数据类型。不知何故,这似乎被查询解析​​器视为number
  • 01) APPLN_DATE 列的数据类型是日期 02) 分配给绑定变量的变量的数据类型是数字

标签: oracle oracleforms oraclereports ora-00932


【解决方案1】:

'10-may-2019' 不是日期,它是文本字符串。在第一种情况下,Oracle 足够聪明,可以将文本字符串转换为日期。在第一种情况下,Oracle 能够进行转换,但在第二种情况下,它会变得混乱。

我建议将您的代码更改为

SELECT COUNT(*)
 FROM T_APPLICATION_HDR,T_APPLN_PENSIONER
 WHERE APPLN_PK=APEN_APPLN_PK
 AND APPLN_DATE <= TO_DATE(:APPLN_DATE, 'DD-MON-YYYY') + INTERVAL '10' DAY
 AND APPLN_SECN_ID ='PV1'
 AND APPLN_STAT='04' 

【讨论】:

  • 我修改了你提到的代码,它按照我想要的方式工作。
  • 从 T_APPLICATION_HDR,T_APPLN_PENSIONER 中选择 COUNT(*),其中 APPLN_PK=APEN_APPLN_PK 和 APPLN_DATE
  • @lakshminarayan:我认为巴巴罗斯的意思是,如果答案解决了您的问题,您应该通过单击答案文本左侧的复选标记“接受”它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
  • 2021-04-26
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多