복붙노트

[SQL] - 기존 테이블에 삽입 테이블 또는 뷰가 존재하지 않습니다 ORA-00942가 예외를 얻기

SQL

- 기존 테이블에 삽입 테이블 또는 뷰가 존재하지 않습니다 ORA-00942가 예외를 얻기

기존 테이블에 행의 배치를 삽입하려고 할 때 나는 예외 아래에 무엇입니까

나는 테이블이 DB에 존재 함을 확인할 수 있으며, 그 테이블 사용하여 오라클에 데이터를 삽입 할 수 있습니다 SQL 개발자. 나는 자바에서의 PreparedStatement를 사용하여 행을 삽입 할 때, 그 던지는 표는 오류가 존재하지 않습니다.

오류의 스택 트레이스 아래를 찾아주세요

java.sql.SQLException: ORA-00942: table or view does not exist

    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
    at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289) 
    at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573) 
    at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1889)
    at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1093)
    at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2047)
    at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1940) 
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout>>(OracleStatement.java:2709)
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:589)
    at quotecopy.DbConnection.insertIntoDestinationDb(DbConnection.java:591)
    at quotecopy.QuoteCopier.main(QuoteCopier.java:72) 

사람이 오류에 대한 이유를 제시 할 수 있습니까?

업데이트 : 문제 해결

내 데이터베이스 연결 속성 또는 내 테이블 또는 뷰 이름에 아무 문제가 없었다. 이 문제에 대한 해결책은 매우 이상했다. 내가 삽입을 시도하는 것을 열 중 하나는 CLOB 타입이었다. 내가 전에 오라클 DB에 문제가 처리 CLOB 데이터를 많이했다대로 올바르게 삽입 된 임시 문자열 세터와 문제 및 모든 행 아웃으로 실행 동일한 코드로 CLOB 세터를 대체하여 시도했다!.

로 대체

오류 테이블 또는 뷰가 존재 오류가 있었다 않는 이유 CLOB 데이터를 삽입에서 에러가 발생합니다. 당신의 사람이 설명해 주시겠습니까?

감사합니다 귀하의 답변과 의견을 많이.

해결법

  1. ==============================

    1.테이블이 존재하는 경우 오라클은이 오류를보고합니다,하지만 당신은 그것에 어떤 권한이 없습니다. 당신은 테이블이 있다는 것을 확신 그래서 경우 보조금을 확인.

    테이블이 존재하는 경우 오라클은이 오류를보고합니다,하지만 당신은 그것에 어떤 권한이 없습니다. 당신은 테이블이 있다는 것을 확신 그래서 경우 보조금을 확인.

  2. ==============================

    2.목표 테이블이 존재을 수행하고 올바르게 특권 때 어떤 상황 하에서 ORA-00942 원인의 setClob (일부 문제)가있는 것 같습니다. 나는 단순히 같은 테이블에 CLOB를 결합하지 않음으로써 멀리 ORA-00942 이동을 할 수 있습니다, 지금이 정확한 문제에 봉착했습니다.

    목표 테이블이 존재을 수행하고 올바르게 특권 때 어떤 상황 하에서 ORA-00942 원인의 setClob (일부 문제)가있는 것 같습니다. 나는 단순히 같은 테이블에 CLOB를 결합하지 않음으로써 멀리 ORA-00942 이동을 할 수 있습니다, 지금이 정확한 문제에 봉착했습니다.

    나는 oracle.jdbc.CLOB에 있지만 같은 결과와의 java.sql.Clob와의 setClob ()과의 setClob ()를 시도했습니다.

    당신이 말하는 것처럼 당신이 문자열로 결합하는 경우, 문제는 도망 간다 - 그러나 이것은 다음 4K에 데이터의 크기를 제한합니다.

    트랜잭션이 CLOB 바인딩하기 전에 세션에 열려있을 때 테스트에서이 트리거 될 것으로 보인다. 내가 오라클 지원을 확인 ...이 문제를 해결 한 때 나는 피드백 것이다.

  3. ==============================

    3.내 데이터베이스 연결 속성 또는 내 테이블 또는 뷰 이름에 아무 문제가 없었다. 이 문제에 대한 해결책은 매우 이상했다. 내가 삽입을 시도하는 것을 열 중 하나는 CLOB 타입이었다. 내가 전에 오라클 DB에 문제가 처리 CLOB 데이터를 많이했다대로 올바르게 삽입 된 임시 문자열 세터와 문제 및 모든 행 아웃으로 실행 동일한 코드로 CLOB 세터를 대체하여 시도했다!.

    내 데이터베이스 연결 속성 또는 내 테이블 또는 뷰 이름에 아무 문제가 없었다. 이 문제에 대한 해결책은 매우 이상했다. 내가 삽입을 시도하는 것을 열 중 하나는 CLOB 타입이었다. 내가 전에 오라클 DB에 문제가 처리 CLOB 데이터를 많이했다대로 올바르게 삽입 된 임시 문자열 세터와 문제 및 모든 행 아웃으로 실행 동일한 코드로 CLOB 세터를 대체하여 시도했다!.

    로 대체

  4. ==============================

    4.@unbeli는 권리입니다. 테이블에 적절한 보조금을 가지고하지 않으면이 오류가 발생합니다. 무엇의 가치를 위해, 나는 최근에이 문제를 경험했다. 난 당신이, 내가 SQL 개발자를 통해 문을 삽입 실행할 수 있습니다 설명하지만, 최대 절전 모드를 사용할 때 실패하는 정확한 문제가 발생했다. 나는 마침내 내 코드는 명백한 삽입보다 더 많은 일을 한 것을 깨달았다. 적절한 보조금을 가지고 있지 않은 다른 테이블에 삽입. 조정 교부금 권한은 날 위해를 해결했다.

    @unbeli는 권리입니다. 테이블에 적절한 보조금을 가지고하지 않으면이 오류가 발생합니다. 무엇의 가치를 위해, 나는 최근에이 문제를 경험했다. 난 당신이, 내가 SQL 개발자를 통해 문을 삽입 실행할 수 있습니다 설명하지만, 최대 절전 모드를 사용할 때 실패하는 정확한 문제가 발생했다. 나는 마침내 내 코드는 명백한 삽입보다 더 많은 일을 한 것을 깨달았다. 적절한 보조금을 가지고 있지 않은 다른 테이블에 삽입. 조정 교부금 권한은 날 위해를 해결했다.

    참고 : 그렇지 않으면이 코멘트되었을 수도, 의견에 명성을하지 마십시오.

  5. ==============================

    5.나는 4K로 데이터를 제한 JDBC의에서는 setString () 메소드를 사용하지 않고이 문제를 해결하는 방법을 발견했다.

    나는 4K로 데이터를 제한 JDBC의에서는 setString () 메소드를 사용하지 않고이 문제를 해결하는 방법을 발견했다.

    당신이해야 할 것은 preparedStatement.setClob (INT 차례 parameterIndex, 리더 리더)를 사용하는 것입니다. 적어도이 그 날 위해 일 것입니다. 생각 오라클은 드라이버 문자 스트림에 데이터를 삽입하는 변환은되지 것 같다. 또는 뭔가 특정 오류가 발생.

    characterStream를 사용하는 것은 나를 위해 작동하는 것 같다. 나는 일dB에서 테이블을 읽고 JDBC를 사용하여 다른 하나에 쓰고 있어요. 그리고 난이 위에 언급 한 것처럼 테이블을 찾을 수없는 오류가 발생했습니다. 이 그래서 내가 문제를 해결하는 방법입니다 :

    case Types.CLOB:   //Using a switch statement for all columns, this is for CLOB columns
            Clob clobData = resultSet.getClob(columnIndex); // The source db
            if (clobData != null) {
                preparedStatement.setClob(columnIndex, clobData.getCharacterStream());
            } else {
                preparedStatement.setClob(columnIndex, clobData);
            }
            clobData = null;
            return;
    

    이제 모든 좋은.

  6. ==============================

    6.우리는 BLOB 컬럼에이 문제를 경험했다. 그냥이 오류가 발생하면이 질문에 경우 다른 사람의 땅에서, 우리가 문제를 해결하는 방법입니다 :

    우리는 BLOB 컬럼에이 문제를 경험했다. 그냥이 오류가 발생하면이 질문에 경우 다른 사람의 땅에서, 우리가 문제를 해결하는 방법입니다 :

    우리는이와 함께 시작 :

                preparedStatement.setBlob(parameterIndex, resultSet.getBlob(columnName)); break;
    

    우리는이에 그 라인을 변경하여 문제를 해결 :

            java.sql.Blob blob = resultSet.getBlob(columnName);
            if (blob != null) {
                java.io.InputStream blobData =  blob.getBinaryStream();
                preparedStatement.setBinaryStream(parameterIndex, blobData);
            } else {
                preparedStatement.setBinaryStream(parameterIndex, null);
            }
    
  7. ==============================

    7.스크립트는 스키마 이름을 제공하거나 기본 스키마를 선택하기 위해 데이터베이스에 사용자에 의존 기록합니까?

    스크립트는 스키마 이름을 제공하거나 기본 스키마를 선택하기 위해 데이터베이스에 사용자에 의존 기록합니까?

    그것은 당신이 스키마 이름을하지 않는 것이 당신이 대신 대상 스키마 세트 등을 가진 사용자가 실행 한 경우 벌금을 일하는 것이 스크립트에 대한 잘못된 실행 컨텍스트의 결과로 스키마 사용자의 시스템 사용자와 배치를 계획하고 실시 할 것을 수 있습니다 기본 스키마. 당신의 최선의 조치는 insert 문에서 스키마 이름을 포함하는 것입니다 :

    INSERT INTO myschema.mytable (mycolums) VALUES ('myvalue')
    

    갱신 : 당신이 당신의 준비된 성명에서 바운드 값으로 테이블 이름을 결합하려고합니까? 그것은 작동하지 않습니다.

  8. ==============================

    8.그것은 나를 위해 작동합니다 :

    그것은 나를 위해 작동합니다 :

    Clob clob1;
    while (rs.next()) {
       rs.setString(1, rs.getString("FIELD_1"));
    
       clob1 = rs.getClob("CLOB1");
       if (clob1 != null) {
          sta.setClob(2, clob1.getCharacterStream());
       } else {
          sta.setClob(2, clob1);
       }
       clob1 = null;
    
       sta.setString(3, rs.getString("FIELD_3"));
    }
    
  9. ==============================

    9.여기 질문에 대한 솔루션을 얻었다. 당신이 그것을 사용하는 경우 문제는 유리 물고기에 있습니다. 당신이 JNDI 이름 메이크업을 만들 때 반드시 풀 이름이 정확하고 풀 이름은 생성되는 연결 풀 이름의 이름입니다.

    여기 질문에 대한 솔루션을 얻었다. 당신이 그것을 사용하는 경우 문제는 유리 물고기에 있습니다. 당신이 JNDI 이름 메이크업을 만들 때 반드시 풀 이름이 정확하고 풀 이름은 생성되는 연결 풀 이름의 이름입니다.

  10. from https://stackoverflow.com/questions/6561650/getting-an-exception-ora-00942-table-or-view-does-not-exist-when-inserting-in by cc-by-sa and MIT license