oracle 如何在JDBC模板中通过preparedStatement将变量转换为SQL查询中的函数?

1qczuiv0  于 2023-03-17  发布在  Oracle
关注(0)|答案(1)|浏览(93)

我使用Oracle数据库。你能帮助我吗?帮助please谁可以,我厌倦了这个问题=(我有这样的SQL查询,我需要把我的变量到函数-转换器到_日期:

select p.mass_id, p.*
from cpm_problem p
where category = '9154812121313217606'
  and type = '9154812121313217612'
  and created_when > TO_DATE(lastPpr = ?, 'YYYY-MM-DD HH24:MI:SS')
order by created_when desc

这是我的想法代码:

private static final String LAST_PPR_FROM_RDB = "select p.mass_id, p.* from cpm_problem p where category = '9154812121313217606' and type = '9154812121313217612' and created_when > to_date(latestPprStr = ?, 'YYYY-MM-DD HH24:MI:SS') order by created_when desc";

返回最新PprStr 2022-12-31 12:00:00

public Ppr getCpmProblems() {
        String latestPprStr = senderJdbcTemplate.queryForObject(LAST_PPR_FROM_SENDER, String.class);
        Ppr ppr1 = rdbJdbcTemplate.query(LAST_PPR_FROM_RDB, ps -> ps.setString(1, latestPprStr),
                new BeanPropertyRowMapper<>(Ppr.class)).stream().findAny().orElse(null);
        return ppr1;
    }

关键的问题是值不能转换成日期,我怎么想...
错误在这里:
原因:错误:907,位置:153,Sql =从cpm_problem p中选择p.mass_id,p.,其中类别=“9154812121313217606”,类型=“9154812121313217612”,并且创建时间〉截止日期(最近的PprStr =:1,“YYYY-MM-DD HH 24:MI:SS”),按创建时间描述排序,原始Sql =从cpm_problem p中选择p.mass_id,p.,其中类别=“9154812121313217606”,类型="9154812121313217612“,并且创建时间〉截止日期(最近的PprStr =?," YYYY-MM-DD HH 24:MI:SS”),按创建时间描述排序,
错误消息= ORA-00907:缺少右括号
任何筛选的"'“或类似的是行不通的,我也试图使用更简单的结构,如:
select p.mass_id, p.* from cpm_problem p where category = '9154812121313217606' and type = ?
只是为了检查我的代码在想法是工作和一切都添加到SQL查询成功。但正是在to_date(...)我不能把变量。每次我有坏的SQL语法和“:1”

s4n0splo

s4n0splo1#

"to_date(latestPprStr = :1 , 'YYYY-MM-DD HH24:MI:SS')"

不是有效的SQL表达式。如果要将字符串绑定到此表达式中,则预准备语句SQL字符串应为:

"to_date(:1 , 'YYYY-MM-DD HH24:MI:SS')"

你可以在其中绑定一个字符串

相关问题