내가이 쿼리를 실행하기 위해 노력하고있어와 오른쪽 괄호 누락,하지만 난 오류를ORA-00907 : PreparedStatement의
ORA-00907를 가지고 :없는 오른쪽 괄호
내가 검토 문이 있지만 괄호가 옳다. 나는 쿼리의 마지막 줄을 제거하고 그것을 작동 :
AND TN.LAST_UPDATEDATE > (CURRENT_TIMESTAMP - INTERVAL ? MINUTE)
어쩌면 '>'oparator에 뭔가 할 수 있습니다,하지만 난 그것을 whithout이 작업을 수행 할 수 없습니다.
코드 : 매개 변수 바인딩
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)"
+ ")";
코드 : 나는 루프에 대한 몇 가지 채우기 다른 방법에 따라서
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;
}
}
을, 어떤 경우에는 원인, 등록 정보에있는 매개 변수 (파일)은 둘 이상일 수 있습니다.
int i=1;
for(String carriers : getCarrier()) {
ps.setString(i, carriers);
i++;
}
for(String state : getAllStates()) {
ps.setString(i, state);
i++;
}