我试图运行具有几列CLOB数据类型的查询。如果我像正常运行查询,所有这些字段只有(CLOB)
作为值。如何查询Oracle中的CLOB列
我尝试使用DBMS_LOB.substr(column
),我得到的错误
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
我怎样才能查询CLOB列?
我试图运行具有几列CLOB数据类型的查询。如果我像正常运行查询,所有这些字段只有(CLOB)
作为值。如何查询Oracle中的CLOB列
我尝试使用DBMS_LOB.substr(column
),我得到的错误
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
我怎样才能查询CLOB列?
当得到一个CLOB列的子字符串并使用查询工具,有时也有大小/缓冲限制,你就需要设置BUFFER到更大的尺寸。例如,在使用SQL Plus时,使用SET BUFFER 10000
将其设置为10000,因为默认值为4000.
运行DBMS_LOB.substr
命令,您还可以指定要返回的字符数量和偏移量。因此,使用DBMS_LOB.substr(column, 3000)
可能会将其限制为缓冲区足够小的数量。
更多信息,请参见oracle documentation在SUBSTR命令
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;
我将它限制为3000,它工作。谢谢! – Catfish 2010-09-24 20:03:09
如果您在使用SQL * Plus尝试以下...
set long 8000
select ...
这工作
select DBMS_LOB.substr(myColumn, 3000) from myTable
另一种选择是创建一个函数并调用您需要选择CLOB列函数每次。
create or replace function clob_to_char_func
(clob_column in CLOB,
for_how_many_bytes in NUMBER,
from_which_byte in NUMBER)
return VARCHAR2
is
begin
Return substrb(dbms_lob.substr(clob_column
,for_how_many_bytes
,from_which_byte)
,1
,for_how_many_bytes);
end;
并将该函数调用为;
SELECT tocharvalue, clob_to_char_func(tocharvalue, 1, 9999)
FROM (SELECT clob_column AS tocharvalue FROM table_name);
对于大CLOB将选择也可用于:
SELECT dbms_lob.substr(column_name, dbms_lob.getlength(column_name), 1) FROM foo
我没有在我的Oracle数据库HugeClob运行到另一个状态。该dbms_lob.substr
只有在功能,前允许的4000的值:
dbms_lob.substr(column,4000,1)
所以我HughClob这是更大的,我不得不使用select
两个电话:
select dbms_lob.substr(column,4000,1) part1,
dbms_lob.substr(column,4000,4001) part2 from .....
我是从主叫Java应用程序,所以我简单地连接part1和part2并作为电子邮件发送。
问题是什么? – vulkanino 2017-02-20 13:11:21
添加到答案。
declare
v_result clob;
begin
---- some operation on v_result
dbms_lob.substr(v_result, 4000 ,length(v_result) - 3999);
end;
/
在dbms_lob.substr
first parameter
是要提取clob
。
Second parameter
是你想提取多少长度的clob。
Third parameter
是从哪个词你要提取。
在上面的例子中,我知道我的clob大小超过了50000,所以我想要最后的4000个字符。
我正在使用TOAD。 – Catfish 2010-09-24 20:01:55
通常,像Toad和PL/SQL Developer这样的桌面工具不会试图预览CLOB列,而是在可点击的文本框中显示一个通用的''占位符,当您单击它时,它会弹出到单独的大数据窗口中。 –
2017-11-20 18:29:49