首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle JDBC Clob插入问题ORA-00942

Oracle JDBC Clob插入问题ORA-00942
EN

Stack Overflow用户
提问于 2015-07-28 22:15:02
回答 1查看 974关注 0票数 0

我正在从一个Oracle源读取一组字段,并将检索到的数据插入到另一个Oracle源中,当我尝试插入到clob区域时,我碰巧遇到了"java.sql.SQLException: ORA-00942:表或视图不存在“异常,除了clob区域之外,所有字段都已成功插入。下面我将添加目标表的字段和我的示例代码。我还发现了这个solution on stackoverflow,它并没有帮到我。目标表是oracle exadata。

代码语言:javascript
复制
Table PODS.RAP_AUDIT
Column name: EVENT_ID
Column type: VARCHAR2

Column name: RUN_DATE
Column type: DATE

Column name: USER_NAME
Column type: VARCHAR2

Column name: STATUS
Column type: VARCHAR2

Column name: UNIVERSE_NAME
Column type: VARCHAR2

Column name: REPORT_NAME
Column type: VARCHAR2

Column name: CUI_ID
Column type: VARCHAR2

Column name: QUERY_NAME
Column type: VARCHAR2

Column name: REPORT_DURATION
Column type: NUMBER

Column name: ROW_COUNT
Column type: VARCHAR2

Column name: SQL
Column type: CLOB

代码:

代码语言:javascript
复制
private static void retrieveClobArea() {

        String sql = "select E.START_TIME as dateval, 5087472590231472273 as idval,  D.EVENT_DETAIL_VALUE as clobval  from BO41AUD.ADS_EVENT_DETAIL D, BO41AUD.ADS_EVENT E where E.EVENT_ID=D.EVENT_ID and     E.START_TIME >= to_date('28.07.2015 12:19:14','DD.MM.YYYY HH:MI:SS')";

        try {
            Class.forName(jdbcDriver);
            connection = DriverManager.getConnection(sourceDBConnection,
                    sourceDBUser, sourceDBPass);
            statement = connection.createStatement();
            resultSet = statement.executeQuery(sql);
            while (resultSet.next()) {

                insertSampleCLOB(resultSet.getString(2), resultSet.getClob(3));
            }
        } catch (SQLException e) {
            System.err.println(e);
        } catch (ClassNotFoundException e) {
            System.err.println(e);
        } finally {
            try {
                connection.close();
            } catch (SQLException e) {
                System.err.println(e);
            }
        }

    }


private synchronized static void insertSampleCLOB(String eventId, Clob sql) {
        StringBuilder insertQuery = new StringBuilder();
        insertQuery.append("INSERT INTO PODS.RAP_AUDIT ");
        insertQuery.append("(");
        insertQuery.append("EVENT_ID, ");
        insertQuery.append("SQL");
        insertQuery.append(")  VALUES(?,?)");

        try {
            Class.forName(jdbcDriver);
            connection = DriverManager.getConnection(targetDBConnection,
                    targetDBUser, targetDBPass);
            preparedStatement = connection.prepareStatement(insertQuery
                    .toString());

            preparedStatement.setString(1, eventId);

            preparedStatement.setClob(2, sql);


            preparedStatement.executeUpdate();
            System.out.println("Inserted " + eventId + "  " + new java.util.Date());

        } catch (ClassNotFoundException e) {
            logger.error("insertInRAP_AUDIT exception cnfe " + e);
            System.err.println(e);
        } catch (SQLException e) {
            logger.error("insertInRAP_AUDIT exception sqle " + e);
            System.err.println(e);
        } finally {
            try {
                connection.close();
            } catch (SQLException e) {
                logger.error("insertInRAP_AUDIT exception connection close e "
                        + e);
                System.err.println(e);
            }
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2015-07-29 21:58:00

在调用方法insertSampleClob之前,请执行以下操作:

代码语言:javascript
复制
Clob clob = CLOB.createTemporary(connection, false, oracle.sql.CLOB.DURATION_SESSION);
clob= resultSet.getClob(3);

然后:

代码语言:javascript
复制
insertSampleCLOB(resultSet.getString(2),clob);

它应该可以解决您的问题。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31678945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档