使用 CLOB 值更新 oracle 中的 clob 列

Posted

技术标签:

【中文标题】使用 CLOB 值更新 oracle 中的 clob 列【英文标题】:Updating clob column in oracle with CLOB value 【发布时间】:2013-05-02 13:11:57 【问题描述】:

我要更新一列是CLOB类型,方法如下;

public boolean formVeriGuncelleSil(String sql) throws VeritabaniException 
        try 
            Session session = getSessionFactory().getCurrentSession();
            SQLQuery query = session.createSQLQuery(sql);
            query.executeUpdate();
            return true;
         catch (RuntimeException e) 
            throw new VeritabaniException(e, VERIGUNCELLEMEEXCEPTION, "FID_01_02_01");
        
    

sql字符串;

UPDATE K1FORM_LISTGRID3 SET TEXTAREA4=oracle.sql.CLOB@77df8d, TEXTT5='ANAFORM',ANATABLO='1', OLUSTURAN_KULLANICI='184' WHERE ID=1

我收到“java.sql.SQLSyntaxErrorException: ORA-01729: 预期的数据库链接名称”错误

我怎样才能修复这个 sql。请帮忙。

【问题讨论】:

修复什么?您收到错误消息吗? 是的,我收到“java.sql.SQLSyntaxErrorException: ORA-01729: database link name expected”错误和我的 sql 查询“UPDATE K1SSS_LISTGRID3 SET TEXTAREA4=oracle.sql.CLOB@77df8d,TEXTT5=' deneme',ANATABLO='1',OLUSTURAN_KULLANICI='184' WHERE ID=23" 使用PreparedStatements 和setClob 方法。 【参考方案1】:

Oracle 正在解释这条 SQL

SET TEXTAREA4=oracle.sql.CLOB@77df8d

因为 @ 符号作为数据库链接,但无论如何都没关系,因为您在这里所做的只是尝试将列的值设置为 toString 的 CLOB,这不是您想要的。

您的代码示例并没有真正概述问题出在哪里,因为该方法只是执行传递的 SQL 的通用实用程序,但我建议两件事中的一件:

    遵循GriffeyDog 的建议并切换到使用 PreparedStatement,您可以在其中使用 PreparedStatement.setClob 绑定 CLOB。 如果您使用的是 Oracle 11g+ JDBC 驱动程序,则可以使用简单的 Java 字符串设置 CLOB 列的值。

【讨论】:

以上是关于使用 CLOB 值更新 oracle 中的 clob 列的主要内容,如果未能解决你的问题,请参考以下文章

如何更新没有根元素的clob oracle中的xml元素

oracle中blob,clob,nclob主要区别是啥?

在 Oracle 的 CLOB 列中更新 xml 标记

使用 Mybatis 3 更新 Oracle CLOB 有啥技巧吗?

oracle中怎样修改varchar2字段为clob字段

使用 Oracle 数据库中的 SQL 从 CLOB 数据中提取数据