`
tanlingcau
  • 浏览: 138132 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Clob errorORA-01704: string literal too long

阅读更多
Clob字段在SQL语句中一般可当作字符串处理。
但当字符串的长度>4000时,会出现errorORA-01704: string literal too long错误。
因为SQL语句超过了允许的长度,在PL/SQL中可能限制更短。

处理方法:
java中可引用preparedStatement。PL/SQL中则可使用变量。

tomcat6.0和weblogic9.2下测试通过
/**
	 * @param conn
	 *            连接
	 * @param table
	 *            表名
	 * @param idColumn
	 *            查询关键字列名
	 * @param idValue
	 *            查询关键字值
	 * @param clobColumn
	 *            CLOB列名
	 * @param clobValue
	 *            CLOB值
	 * @return
	 */
	public int updateClob(Connection conn, String table, String idColumn, String idValue, String clobColumn,
			String clobValue) {
		int se = -1;
		ResultSet rs = null;
		PreparedStatement pst = null;
		boolean defaultCommit = true;
		try {
			defaultCommit = conn.getAutoCommit();
			conn.setAutoCommit(false);


			// 将原Clob字段置空
			String updateToEmptySql = "UPDATE " + table + " SET " + clobColumn + " = EMPTY_CLOB() WHERE " + idColumn
					+ "='" + idValue + "'";
			pst = conn.prepareStatement(updateToEmptySql);
			pst.executeUpdate();

			// 更新Clob字段
			String getForUpdateSql = "select " + clobColumn + " from " + table + " where " + idColumn + " = '"
					+ idValue + "' for update";
			pst = conn.prepareStatement(getForUpdateSql);
			rs = pst.executeQuery();

			if (rs.next()) {
				oracle.sql.CLOB clob = (oracle.sql.CLOB) (rs.getClob(clobColumn));
				clob.putString(1, clobValue);
				String sql = "update " + table + " set " + clobColumn + "=? where " + idColumn + "='" + idValue + "'";
				pst = conn.prepareStatement(sql);
				pst.setClob(1, clob);
				se = pst.executeUpdate();
				conn.commit();
				conn.setAutoCommit(defaultCommit);
			}
		} catch (SQLException e) {
			se = -1;
			try {
				conn.rollback();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			e.printStackTrace();
		} finally {
			try {
				if (rs != null) {
					rs.close();
				}
				if (pst != null) {
					pst.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return se;
	}
分享到:
评论

相关推荐

    CLOB 字段类型报错 ORA-01704: 文字字符串过长的解决

    然而,当你尝试向CLOB字段插入数据时,如果超过了Oracle规定的最大限制,就会遇到“ORA-01704: 文字字符串过长”的错误。这个错误通常意味着你试图插入的字符串超过了Oracle数据库允许的最大长度,对于VARCHAR2类型...

    ORA-01461 仅可以为插入 LONG 列的 LONG 值赋值”解决办法

    LOB 数据类型有四种:BLOB(Binary Large OBject)、CLOB(Character Large OBject)、NCLOB(National Character Large OBject)和 BFILE(Binary File)。 现在,我们回到 ORA-01461 错误解决办法。该错误的解决...

    mysql与oracle数据类型对应关系.pdf

    - LONGBLOB和LONGTEXT:存储大型对象,Oracle中对应BLOB和CLOB。 - MEDIUMBLOB和MEDIUMINT:介于BLOB/TINYBLOB与LONGBLOB/INT之间,Oracle没有直接对应,可用BLOB或NUMBER替代。 - MEDIUMTEXT:对应Oracle的CLOB...

    ora-01460 错误原因分析

    ### ORA-01460 错误原因分析 #### 概述 在Oracle数据库操作过程中,可能会遇到ORA-01460错误,该错误全称为“ORA-01460: 转换请求无法实现或不合理”。这一错误通常发生在数据类型转换或者与操作系统之间的数据...

    关于Clob类型在Hibernate中 的应用小结.rar

    通常,要解决超过4000字节的数据,一种做法是将数据写入文件,xml或plain file都可以,数据...另一个做法是使用clob, blob等字段类型,主要有:采用传统的jbdc方式、把clob以string方式处理、直接使用clob类型三种方案

    oracle数据库的clob大字段在jdbc中的处理方式

    这篇文档将详细阐述如何在JDBC中有效地读取和操作Oracle数据库的CLOB字段,并将其转换为String类型。 首先,理解CLOB对象的特性是关键。CLOB是一种BLOB(Binary Large Object)的变种,专用于存储字符数据。在JDBC...

    MySql Oracle SqlServer三大数据库的数据类型列表.pdf

    4. LOB(Large Object):BFILE、CLOB、NCLOB 和 BLOB,用于存储大量非结构化数据。 总结,MySQL 和 Oracle 都提供了丰富的数据类型来适应各种数据存储需求。MySQL 更侧重于简单的数据类型和易用性,而 Oracle 提供...

    多数据库的字段类型详解

    - CLOB:字符大对象,用于存储大量文本数据。 4. Sybase: Sybase数据库的数据类型包括: - INTEGER:4字节整数。 - VARCHAR:可变长度的字符串,最大长度为8000个字符。 - REAL:单精度浮点数。 - DATETIME...

    MySqlOracleSqlServer三大数据库的数据类型列表[借鉴].pdf

    4. LOB类型:用于存储大对象,如BLOB(Binary Large Object)用于二进制数据,CLOB(Character Large Object)用于文本数据。 Oracle的PLS_INTEGER和BINARY_INTEGER在计算时有所不同,PLS_INTEGER溢出会导致错误,...

    Oracle 自学入门

    8. **BLOB/CLOB/NCLOB** - 描述:大型对象类型,最大长度可达4GB。 - 特点:适用于存储较大的图形文件或带格式的文本文件。 9. **BFILE** - 描述:外部存储的大型二进制对象类型,最大长度为4GB。 - 特点:数据...

    DB2函数大全

    7. **CLOB**: 返回CLOB类型的值。 - 示例:`SELECT CLOB(value) FROM table;` 8. **COALESCE**: 返回第一个非NULL的表达式值。 - 示例:`SELECT COALESCE(NULL, NULL, 'Default Value');` 9. **CONCAT**: 连接两...

    ORACLE函数大全汇总详解(20100915补充修订版)

    4. **EMPTY_BLOB/EMPTY_CLOB**: 创建一个空的BLOB/CLOB。 - 示例:`EMPTY_BLOB()` 创建一个空的BLOB对象。 5. **GREATEST/LEAST**: 返回一组值中的最大/最小值。 - 示例:`GREATEST(10, 20, 30)` 返回30;`LEAST...

    DB2函数详解

    7. **CLOB**: 返回CLOB类型的值。 - 示例:`SELECT CLOB(text_data) FROM texts;` 8. **COALESCE**: 如果第一个参数不为NULL,则返回该参数;否则返回第二个参数,依此类推。 - 示例:`SELECT COALESCE(null_...

    ORA-02298: 无法验证 (约束)提示未找到父项关键字的解决办法

    ALTER TABLE PN_POST ADD CONSTRAINT POST_CLOB_FK FOREIGN KEY (POST_BODY_ID) REFERENCES PN_POST_BODY_CLOB (OBJECT_ID) NOVALIDATE; ``` 2. **检查和修复数据一致性**:首先,你需要确保两个表之间的数据是...

    db2数据类型详解

    - 示例:`CLOB(10M) long_text;` #### 四、图形字符串型数据类型 图形字符串型数据类型主要用于存储双字节字符数据。 1. **定长图形字符串 (GRAPHIC(n))** - 长度:1至254双字节字符 - 示例:`GRAPHIC(5) name...

    Oracle数据库学习日记

    - **Clob 字符型大对象** - 示例: `CLOB` ##### 3.2 数值型 - **Number 数值型** - 示例: `NUMBER(10, 2)` 表示最多有10位数字,其中2位是小数。 ##### 3.3 日期 - **Date 一般日期(年、月、日,时、分、秒)...

    ORACLE中CLOB字段转String类型

    ### ORACLE中CLOB字段转String类型 在Oracle数据库中,`CLOB`(Character Large Object)是一种用于存储大量文本数据的数据类型。由于其能够存储非常大的文本块(最大可达4GB),因此常被用于存储文章、报告或任何...

    APEX-CLOB-Load-2:该插件可以将Clob数据加载到APEX页面上的任何DOM元素或项目,包括RichTextEditor(CKE)。 也可以再次将CLOB值上传到数据库。 此值存储在APEX Collection中,或者该插件也可能调用PLSQL API,例如,上传后将CLOB写入表中

    APEX-CLOB-Load-2 该插件可以将Clob数据加载到APEX页面上的任何DOM元素或项目,包括RichTextEditor(CKE)。 也可以再次将CLOB值上传到数据库。 该值存储在APEX Collection中,或者该插件也可能调用PL / SQL API,...

    Access、SQLServer、Oracle三种数据库的区别.pdf

    - Oracle: VARCHAR2最大4000个字符,CLOB用于大量文本数据。 这些差异体现了不同数据库系统的特性和语法习惯,开发时需要根据所使用的数据库系统进行相应的调整以确保语句的正确性和兼容性。在编写SQL语句时,尤其...

    Informix函数大全

    10. **lotofile()**:将BLOB/CLOB对象写入文件。 - 例如:`SELECT lotofile(blob_col, '/path/to/output') FROM table_name;` 11. **lower**:将字符串转换为小写字母。 - 例如:`SELECT lower('HELLO WORLD') ...

Global site tag (gtag.js) - Google Analytics