개발 공부중

[ORACLE] 오류 모음 (부적합한 열 인덱스 오류/누락된 표현식/값의 수가 너무 많습니다) 본문

ORACLE

[ORACLE] 오류 모음 (부적합한 열 인덱스 오류/누락된 표현식/값의 수가 너무 많습니다)

개발자 leelee 2024. 6. 4. 23:47

 

 

java.sql.SQLException: 부적합한 열 인덱스 오류

 

나의 경우, 변수명이 잘못되어있었다.

NAME 인데 NAEM 이런식으로 되어있었다. 

오타가 없는지 확인을 잘하자.

 

 

ORA-00936 누락된 표현식

 

이것도 오타의 문제

이 에러는 ' ' , . ; * 이런 기호들을 잘못 사용해서 발생한다.

나의 경우, 콤마가 마지막에 더 써져있었다.

 

 

ORA-00913: 값의 수가 너무 많습니다

 

INSERT 구문에 삽입될 컬럼의 개수보다 들어가는 데이터의 개수가 더 많은 경우 발생하는 에러

데이터의 갯수를 잘 맞춰주면 된다.

 

 

 

public class MergeQueryExample {

    private final static String MERGE_QUERY = 
        "MERGE INTO TABLE_1 " +
        "USING DUAL ON (NO = ? AND CHECK = ?) " +
        "WHEN MATCHED THEN " +
        "UPDATE SET " +
        "    NAME = ?, " +
        "    NUMBER = ? " +
        "WHEN NOT MATCHED THEN " +
        "INSERT ( " +
        "    NO, " +
        "    CHECK, " +
        "    NAME, " +
        "    NUMBER " +
        ") VALUES ( " +
        "    ?, " +
        "    ?, " +
        "    ?, " +
        "    ? " +
        ")";

    public int mergeQuery(Connection con, ArrayList<BeanProperty> list, BeanProperty bp, Logger logger) throws Exception {
        PreparedStatement pstmt = null;
        try {
            con.setAutoCommit(false);
            for (int x = 0; x < list.size(); x++) {
                try {
                            pstmt = con.prepareStatement(MERGE_QUERY);

                            /*UPDATE*/
                            int i = 1;
                            pstmt.setString(i++, bp.getString("no"));
                            pstmt.setString(i++, bp.getString("check"));
                            pstmt.setString(i++, bp.getString("name"));
                            pstmt.setString(i++, bp.getString("number"));

                            /*INSERT*/
                            pstmt.setString(i++, bp.getString("no"));
                            pstmt.setString(i++, bp.getString("check"));
                            pstmt.setString(i++, bp.getString("name"));
                            pstmt.setString(i++, bp.getString("number"));

                            pstmt.executeUpdate();
                            pstmt.close();
 
                    }
                } catch (Exception e) {
                    DbUtil.rollback(con);
                    throw e;
                } finally {
                    DbUtil.release(pstmt, null);
                }
            }
            con.commit();
        } catch (Exception e) {
            DbUtil.rollback(con);
            throw e;
        }
        return 1;
    }
}

 


쿼리문이 길어지면 실수가 많아지는 것 같다. 

꼼꼼하게 확인하기.

Comments