gpt4 book ai didi

java - ORA-00907:PreparedStatement 缺少右括号

转载 作者:行者123 更新时间:2023-11-30 02:53:04 27 4
gpt4 key购买 nike

我正在尝试运行此查询,但出现错误

ORA-00907: missing right parenthesis

我审阅了该声明,但括号是正确的。我删除了最后一行查询并且它有效:

AND TN.LAST_UPDATEDATE > (CURRENT_TIMESTAMP - INTERVAL ? MINUTE)

也许可以是“>”操作符中的某些内容,但没有它我就无法做到这一点。

代码:

String sql= "SELECT DID.ORDER_ID "
+ "FROM TEST_ORDER DID, TEST_ORDER_SG DOS, TEST_HRD_SHIPS_GRP DHSG, TEST_INFO CSI "
+ "WHERE DID.ORDER_ID = DOS.ORDER_ID "
+ "AND DOS.SHIPPING_GROUPS = DHSG.SHIPPING_ID "
+ "AND DOS.SHIPPING_GROUPS = CSI.SHIPPING_ID "
+ "AND DHSG.TRACKING_CODE IS NULL AND CSI.SHIPPING_CARRIER IN "
+ "(?) "
+ "AND DID.STATE IN (?) "
+ "AND NOT EXISTS "
+ "("
+ "SELECT 1 FROM "
+ "CLIENT_INTEGRATION.TEST_LOG_ORDERS_STATUS TN "
+ "WHERE TN.ORDER_ID = DID.ORDER_ID AND TN.STATE = DID.STATE "
+ "AND TN.LAST_UPDATEDATE > (CURRENT_TIMESTAMP - INTERVAL ? MINUTE)"
+ ")";

绑定(bind)参数的代码:

int actualIndex = 0;
for (int i = 0; i < params.length; i++) {
actualIndex = sql.indexOf('?', actualIndex+1);
Class classe = params[i].getClass();

if(classe.isArray()) {
StringBuffer newPlaceHolders = new StringBuffer();

int arrayLength = java.lang.reflect.Array.getLength(params[i]);

for (int j = 0; j < arrayLength; j++) {

if (j>0) {
newPlaceHolders.append(",?");
} else {
newPlaceHolders.append("?");
}
}

sql = sql.substring(0, actualIndex) + newPlaceHolders + sql.substring(actualIndex+1);
actualIndex += newPlaceHolders.length();
}

if (actualIndex == -1) {
break;
}
}

因此,在另一种方法中,我填充了一些 for 循环,因为在某些情况下,参数(位于属性文件中)可以多个。

int i=1;
for(String carriers : getCarrier()) {
ps.setString(i, carriers);
i++;
}

for(String state : getAllStates()) {
ps.setString(i, state);
i++;
}

最佳答案

间隔?分钟无效。

语法为INTERVAL '1' MINUTE(并且您不能为该值指定变量)。

如果你想指定一个变量,你需要使用 TO_DSINTERVAL()

类似于:

TO_DSINTERVAL( '0 00:' || TO_CHAR( ?, 'FM00' ) || ':00' )

旁白

您似乎通过修改查询以采用多个绑定(bind)变量来将列表传递到查询中;你不需要这样做。相反,您可以将 Oracle 集合作为单个绑定(bind)变量传递。可以找到这样的示例 here (稍微复杂一点,因为该示例适用于多维数组)但有一个更简单的示例 here .

关于java - ORA-00907:PreparedStatement 缺少右括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38056329/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com