标签: clob

DB2和Oracle Perspective中CLOB和BLOB的区别?

我对这两种数据类型非常着迷.根据Oracle Docs,它们呈现如下:

BLOB:可变长度二进制大对象字符串,最长可达2GB(2,147,483,647).主要用于保存非传统数据,如语音或混合媒体.与FOR BIT DATA字符串一样,BLOB字符串与字符集无关.

CLOB:可变长度字符大对象字符串,最长可达2GB(2,147,483,647).CLOB可以存储单字节字符串或多字节,基于字符的数据.CLOB被视为字符串.

我不知道的是,从DB2和Oracle的角度来看,两者之间是否有任何区别?我的意思是,DB2 CLOB和Oracle CLOB之间,DB2 BLOB和Oracle BLOB之间有什么区别?DB2和Oracle中的最大大小是多少?它只是2 GB?

database oracle db2 blob clob

94
推荐指数
3
解决办法
17万
查看次数

禁用上下文LOB创建为createClob()方法引发错误

我正在使用Hibernate 3.5.6和Oracle 10g.我在初始化期间看到了以下异常,但应用程序本身工作正常.这个例外的原因是什么?以及如何纠正?

异常
createClob()方法抛出错误时禁用上下文LOB创建:java.lang.reflect.InvocationTargetException

信息
Oracle版本:Oracle数据库10g企业版10.2.0.4.0版JDBC驱动程序:Oracle JDBC驱动程序,版本:11.1.0.7.0

java hibernate clob oracle10g

81
推荐指数
9
解决办法
12万
查看次数

ORA-00932:不一致的数据类型:预期 - 获得CLOB

考虑到这TEST_SCRIPT就是CLOB 为什么当我从Oracle上的SQL*PLUS运行这个简单的查询时,我得到错误:

ORA-00932: inconsistent datatypes: expected - got CLOB
Run Code Online (Sandbox Code Playgroud)

我一直在阅读有关同一错误的很多问题,但没有一个是从SQLPLUS运行直接查询

    UPDATE IMS_TEST 
       SET TEST_Category  = 'just testing'  
     WHERE TEST_SCRIPT    = 'something'
       AND ID             = '10000239' 
Run Code Online (Sandbox Code Playgroud)

完整示例:

SQL> create table ims_test(
  2  test_category varchar2(30),
  3  test_script clob,
  4  id varchar2(30)
  5  );

Table created.

SQL> insert into ims_test values ('test1','something','10000239');

1 row created.

SQL> UPDATE IMS_TEST
  2  SET TEST_Category  = 'just testing'
  3  WHERE TEST_SCRIPT    = 'something'
  4  AND ID             = '10000239';
WHERE TEST_SCRIPT    = 'something'
      *
ERROR …
Run Code Online (Sandbox Code Playgroud)

oracle clob

61
推荐指数
4
解决办法
22万
查看次数

如何在Oracle中查询CLOB列

我正在尝试运行一个具有几列CLOB数据类型的查询.如果我像正常一样运行查询,那么所有这些字段都只有(CLOB)值.

我尝试使用DBMS_LOB.substr(column),我得到错误

ORA-06502: PL/SQL: numeric or value error: character string buffer too small
Run Code Online (Sandbox Code Playgroud)

我如何查询CLOB列?

sql oracle plsql clob ora-06502

45
推荐指数
4
解决办法
38万
查看次数

用于将CLOB读取到String的最有效解决方案,以及在Java中将String读取到CLOB?

我有一个很大的CLOB(超过32kB)我想用StringBuilder读取一个String.我如何以最有效的方式做到这一点?我不能使用StringBuilder的"int length"构造函数,因为我的CLOB的长度比"int"长,并且需要"long"值.

我对Java I/O类并不那么舒服,并希望获得一些指导.

编辑 - 我已经尝试使用clobToString()的代码:

private String clobToString(Clob data) {
    StringBuilder sb = new StringBuilder();
    try {
        Reader reader = data.getCharacterStream();
        BufferedReader br = new BufferedReader(reader);

        String line;
        while(null != (line = br.readLine())) {
            sb.append(line);
        }
        br.close();
    } catch (SQLException e) {
        // handle this exception
    } catch (IOException e) {
        // handle this exception
    }
    return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)

java stringbuilder clob

43
推荐指数
5
解决办法
13万
查看次数

如何在Oracle中获取CLOB列的大小(以字节为单位)?

如何获取CLOBOracle中列的大小(以字节为单位)?

LENGTH()并且DBMS_LOB.getLength()两者都返回使用的字符数,CLOB但我需要知道使用了多少字节(我正在处理多字节字符集).

sql oracle clob

33
推荐指数
5
解决办法
14万
查看次数

过于复杂的oracle jdbc BLOB处理

当我使用jdbc瘦驱动程序搜索Web以将BLOB插入Oracle数据库时,大多数网页都建议采用三步法:

  1. 插入empty_blob()值.
  2. 选择行for update.
  3. 插入实际价值.

这对我来说很好,这是一个例子:

Connection oracleConnection = ...

byte[] testArray = ...

PreparedStatement ps = oracleConnection.prepareStatement(
    "insert into test (id, blobfield) values(?, empty_blob())");
ps.setInt(1, 100);
ps.executeUpdate();
ps.close();
ps = oracleConnection.prepareStatement(
    "select blobfield from test where id = ? for update");
ps.setInt(1, 100);
OracleResultSet rs = (OracleResultSet) ps.executeQuery();
if (rs.next()) {
    BLOB blob = (BLOB) rs.getBLOB(1);
    OutputStream outputStream = blob.setBinaryStream(0L);
    InputStream inputStream = new ByteArrayInputStream(testArray);
    byte[] buffer = new byte[blob.getBufferSize()];
    int byteread = 0;
    while …
Run Code Online (Sandbox Code Playgroud)

java oracle blob jdbc clob

31
推荐指数
4
解决办法
4万
查看次数

错误:ORA-01704:字符串文字太长

虽然我尝试在具有数据类型的字段上设置超过4000个字符的值CLOB,但它给了我这个错误:

ORA-01704:字符串文字太长.

任何建议,如果我必须设置无限字符的值,哪种数据类型适用于我,虽然对于我的情况,它恰好是关于15000字符的.

注意:我尝试存储的长字符串是用ANSI编码的.

oracle codeigniter clob nclob

29
推荐指数
2
解决办法
8万
查看次数

在Oracle clob列中搜索特定字符串

如何从clob列中获取特定字符串?

我有如下数据存储在名为clob列中 product_details

CALCULATION=[N]NEW.PRODUCT_NO=[T9856] 
OLD.PRODUCT_NO=[T9852].... -- with other text
Run Code Online (Sandbox Code Playgroud)

我想NEW.PRODUCT_NO从列中搜索字符串product_details

我试过了

select * from my_table
where dbms_lob.instr(product_details,'NEW.PRODUCT_NO')>=1
Run Code Online (Sandbox Code Playgroud)

以上从我的表中提取全文.

任何帮助都非常值得赞赏.

问候

sql oracle clob oracle10g

26
推荐指数
3
解决办法
11万
查看次数

SUBSTR在CLOB上的性能

我有一个PL/SQL过程,它SUBSTRVARCHAR2参数上做了很多.我想删除长度限制,所以我尝试将其更改为CLOB.

工作正常,但性能受损,所以我做了一些测试(基于2005 年的这些测试).


更新:我可以在具有不同Oracle版本和不同硬件的几个不同实例上重现这一点,dbms_lob.substr总是明显慢于substr(CLOB),并且慢很多SUBSTR(VARCHAR2).

鲍勃的结果和上面链接中的测试讲述了一个不同的故事.

任何人都可以解释这个,或者至少复制鲍勃或我的结果?谢谢!


检测结果:

+000000000 00:00:00 004000000(VARCHAR2)
+000000000 00:00:00.298000000(CLOB SUBSTR)
+000000000 00:00:00.356000000(DBMS_LOB.SUBSTR)

测试代码:

DECLARE
  l_text   VARCHAR2(30) := 'This is a test record';
  l_clob   CLOB := l_text;
  l_substr VARCHAR2(30);
  t TIMESTAMP;
BEGIN
  t := SYSTIMESTAMP;
  FOR i IN 1..100000 LOOP
    l_substr := SUBSTR(l_text,1,14);
  END LOOP;
  dbms_output.put_line( SYSTIMESTAMP - t || ' (VARCHAR2)');

  t := SYSTIMESTAMP;
  FOR i IN …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql clob oracle11g

25
推荐指数
1
解决办法
2万
查看次数