无法在Oracle函数中传递CLOB

时间:2013-12-27 18:31:19

标签: oracle plsql clob

我正在尝试在oracle函数中传递CLOB作为输入参数。该函数已成功创建,但当我尝试传递一个冗长的字符串时,它会给出

  

ora-01704字符串文字太长

错误。

以下是我的功能:

CREATE OR REPLACE FUNCTION mySchema.TESTFUNCTION(myData IN CLOB)
  RETURN INT
AS
BEGIN
  DBMS_OUTPUT.PUT_LINE(myData);
  RETURN 1;
END;

当我尝试通过传递超过5000个字符的冗长字符串来调用此函数时,它会给出错误。

请有人帮忙吗

1 个答案:

答案 0 :(得分:6)

  是的,我只是作为一个字符串传递。例如:从双重选择TESTFUNCTION('超过5000个字符');

不,不能那样做。该错误是预期的错误,因为SQL(12c之前的Oracle版本)无法处理长度超过4000字节的字符文字。

如果需要测试函数,请使用PL / SQL,其中字符文字的长度最多为32767个字符(单字节字符集):

这是我们的功能:

注意:从Oracle 10g R2开始dbms_output.put_line()行限制为32767字节,在10g R2之前的版本中,行限制为255字节。

create or replace function f1(
  p_clob in clob
) return number is
begin
  dbms_output.put_line(p_clob);
  return 1;
end; 

这是我们用于测试该功能的匿名PL / SQL块:

clear screen;
set serveroutput on;

declare
  l_var clob;
  l_res number;
begin
  l_var := 'aaaaaaaaaaaaaaaaaa.. more than 5000 characters';
  l_res := f1(l_var);
end; 

结果:

anonymous block completed
aaaaaaaaaaaaaaaaaa.. more than 5000 characters