Cat*_*ish 45 sql oracle plsql clob ora-06502
我正在尝试运行一个具有几列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列?
小智 70
这有效
select DBMS_LOB.substr(myColumn, 3000) from myTable
Run Code Online (Sandbox Code Playgroud)
mrj*_*ohn 43
获取CLOB列的子字符串并使用具有大小/缓冲区限制的查询工具时,有时需要将BUFFER设置为更大的大小.例如,使用SQL Plus时,使用将SET BUFFER 10000
其设置为10000,因为默认值为4000.
运行该DBMS_LOB.substr
命令还可以指定要返回的字符数以及从中返回的偏移量.因此使用DBMS_LOB.substr(column, 3000)
可能会将其限制为足够小的缓冲区.
有关substr命令的更多信息,请参阅oracle文档
DBMS_LOB.SUBSTR ( lob_loc IN CLOB CHARACTER SET ANY_CS, amount IN INTEGER := 32767, offset IN INTEGER := 1) RETURN VARCHAR2 CHARACTER SET lob_loc%CHARSET;
小智 8
我在Oracle数据库中遇到了HugeClob的另一个问题.将dbms_lob.substr
只允许在功能,前一个4000值:
dbms_lob.substr(column,4000,1)
Run Code Online (Sandbox Code Playgroud)
所以对于我更大的HughClob,我不得不使用两个电话select
:
select dbms_lob.substr(column,4000,1) part1,
dbms_lob.substr(column,4000,4001) part2 from .....
Run Code Online (Sandbox Code Playgroud)
我是从Java应用程序调用的,所以我简单地连接part1和part2并作为电子邮件发送.
如果是 CLOB 为什么我们不能对列进行 to_char 然后正常搜索?
创建一个表
CREATE TABLE MY_TABLE(Id integer PRIMARY KEY, Name varchar2(20), message clob);
Run Code Online (Sandbox Code Playgroud)
在此表中创建几条记录
INSERT INTO MY_TABLE VALUES(1,'Tom','Hi This is Row one');
INSERT INTO MY_TABLE VALUES(2,'Lucy', 'Hi This is Row two');
INSERT INTO MY_TABLE VALUES(3,'Frank', 'Hi This is Row three');
INSERT INTO MY_TABLE VALUES(4,'Jane', 'Hi This is Row four');
INSERT INTO MY_TABLE VALUES(5,'Robert', 'Hi This is Row five');
COMMIT;
Run Code Online (Sandbox Code Playgroud)
在clob栏中搜索
SELECT * FROM MY_TABLE where to_char(message) like '%e%';
Run Code Online (Sandbox Code Playgroud)
结果
ID NAME MESSAGE
===============================
1 Tom Hi This is Row one
3 Frank Hi This is Row three
5 Robert Hi This is Row five
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
381841 次 |
最近记录: |