无法在Oracle函数中传递CLOB

sup*_*chu 3 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;
Run Code Online (Sandbox Code Playgroud)

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

请有人帮忙吗

Nic*_*nov 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; 
Run Code Online (Sandbox Code Playgroud)

这是我们用于测试该功能的匿名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; 
Run Code Online (Sandbox Code Playgroud)

结果:

anonymous block completed
aaaaaaaaaaaaaaaaaa.. more than 5000 characters
Run Code Online (Sandbox Code Playgroud)