【问题标题】:Plsql / jdbc date input argument as stringPlsql / jdbc 日期输入参数作为字符串
【发布时间】:2021-12-23 08:00:27
【问题描述】:

我有一个基于特定日期检索数据的 sql,我的 Java 应用程序调用 plsql — Oracle 来执行此操作。

新的请求是根据屏幕上的多个日期选择来获取数据。

我尝试将这些日期形成为逗号分隔的字符串,并将其作为 pl/SQL 的 varchar 输入参数“I_dates”传递。在 Pl/sql 结束时,我尝试对 where 条件使用 IN 子句,但我得到一个错误,即 I_dates 是一个无效的标识符。

问题:我尝试使用多个日期条件分别运行 sql,它工作正常。

Select * from table1 where date in ('2019-05-01', '2019-06-01') 工作正常。

但是 plsql 中带有日期输入参数(I_dates,其中 I_dates 的值为 '2019-05-01','2019-06-01')的相同 sql 不起作用,并说 I_date 是无效标识符

如何在 pl/sql 中获取多个日期条件的结果

【问题讨论】:

  • 绑定变量是单个值 - 在您的情况下,是单个日期。如果您有 2 个日期(2 个变量...),那么您需要 2 个绑定变量。单个绑定变量不能表示日期列表 - 这会导致错误。检查这个question

标签: oracle jdbc plsql bind-variables


【解决方案1】:

您可以使用一个小技巧来使用单个绑定变量和查找日期。示例:

create table mytable (id number, datevalue varchar2(200));

insert into mytable values (1, '29-AUG-2021');
insert into mytable values (2, '01-NOV-2021');
insert into mytable values (3, '15-DEC-2021');
insert into mytable values (4, '21-DEC-2021');
insert into mytable values (5, '01-JAN-2022');


select *
from MYTABLE
where ','||'29-AUG-2021,30-AUG-2021,01-NOV-2021'||',' like '%'||datevalue||'%'

  ID    DATEVALUE
----  -----------
   1  29-AUG-2021
   2  01-NOV-2021

在这种情况下,我已将“29-AUG-2021,30-AUG-2021,01-NOV-2021”指定为多字段绑定变量。您也可以在此位置放置一个绑定变量。

当然,您必须确保您输入的 DATE 的 NLS 设置和格式始终与示例相同,如果您将“01-01-2022”作为绑定输入,则不会给出结果变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    相关资源
    最近更新 更多