在SQL查询的WHERE条件中多次使用相同的参数,以便在JDBC中使用



我想通过JDBC和一个准备好的语句SQL查询发送到我的Oracle数据库,如下所示:

SELECT * FROM mytable WHERE col1 = <ONEVAL> col2 = <ONEVAL> AND col3 = <ONEVAL>;

我从SO的答案中知道如何在jdbc postgresql准备的语句中多次使用相同的值,jdbc不支持命名参数,所以直接准备的语句

SELECT * FROM mytable WHERE col1 = ? AND col2 = ? AND col3 = ?;

只有当我提供<ONEVAL>3次时才有效,但我不想这样做,我宁愿调整准备好的语句的SQL,这样它只需要一个?,但将其应用于所有WHERE条件。类似的东西

WITH VAl = ? SELECT * FROM mytable WHERE col1 = VAL AND col2 = VAL AND col3 = VAL;

但是这个尝试似乎不起作用。有没有办法在SQL字符串中多次使用一个准备好的语句参数?

我尝试过的其他事情:

在@Selvin的善意建议之后,我为准备好的语句使用了以下SQL字符串:

DECLARE val varchar(30) :=? ; SELECT * FROM mytable WHERE col1=&val AND col2=&val AND col3=&val

然后我得到错误">ORA-06550:第1行,第33列:PLS-00103:遇到符号";SELECT";当期望以下之一时:[…]";

如果我做对了,你需要所有三列同时等于相同的值,所以我猜这些SQL将帮助你

SELECT * FROM mytable WHERE col1 = ? AND col1 = col2 AND col1 = col3;

UPD:有一个更好的或者我说更紧凑的想法

SELECT * FROM mytable WHERE ? = all(col1, col2, col3)

最新更新