Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 将日期添加到绑定变量日期字段_Oracle_Oracleforms_Oraclereports_Ora 00932 - Fatal编程技术网

Oracle 将日期添加到绑定变量日期字段

Oracle 将日期添加到绑定变量日期字段,oracle,oracleforms,oraclereports,ora-00932,Oracle,Oracleforms,Oraclereports,Ora 00932,我们使用的是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' 例如,如果输入的appln\u日期为2019

我们使用的是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'
例如,如果输入的
appln\u日期
2019年5月10日
,则查询应在
2019年5月20日
之前获取记录

它给出了这个错误

ORA-00932:不一致的数据类型:预期日期获取编号。


如何修改此查询“2019年5月10日”不是日期,而是文本字符串。在第一种情况下,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_应用程序(HDR),T_应用程序(养老金领取者)
其中,APPLN\u PK=APEN\u APPLN\u PK

你修改查询的方式是正确的。其他原因导致了这个错误。有两件事需要检查(并在检查后与我们共享):(1)表中
APPLN_DATE
列的数据类型。(几乎可以肯定
date
,否则即使在修改之前也会出现相同的错误,但最好始终进行检查。)(2)应用程序创建并在查询中分配给绑定变量的变量的数据类型。这似乎在某种程度上被查询解析器看作是
number
。01)列APPLN_DATE的数据类型是DATE 02)分配给bind变量的变量的数据类型是numberI正如您所提到的那样更改了代码,并按照我希望的方式工作。从T_APPLICATION_HDR中选择COUNT(*),T_APPLN_养老金领取者,其中APPLN_PK=APEN_APPLN_PK和APPLN_DATE@lakshminarayan:我认为Barbaros所说的是,如果答案解决了你的问题,你应该通过点击答案文本左侧的复选标记来“接受”它。
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' 
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'