在函数中处理返回数据很长已经超过 varchar(40000)了,我定义成return long 返回,但是还是会报错,使用out long也报错啊!
有什么办法 解决 返回出来的 长度 超过4k的 ,要用一个变量实现,不能用多个参数返回,谢谢!比如下面函数:
CREATE OR REPLACE FUNCTION funny2(o_yct OUT LONG) RETURN LONG IS
  v_yct  VARCHAR2(32767);
BEGIN
  v_yct := rpad('a', 32750, 'b');
  /*SELECT instr(v_yct, ',', 1) INTO v_find FROM dual;*/
   o_yct:=v_yct;
  RETURN v_yct   ;
 
END;调度会报字符串太短!

解决方案 »

  1.   

    VARCHAR2 最大4000吧。
    clob
      

  2.   

    如果用clob,缓冲区的大小只有32767,如果大于这个值,应该使用dbms_lob.append方法添加吧
      

  3.   


    clob 也试过了,也不行!
      

  4.   

    函数返回clob 然后更改字符缓冲区。
    查一下sga的大小select * from v$parameters
    where name like 'db%';更改db_cache_size大小
    alter system set db_cache_size=25165824 scope=both;
      

  5.   


    没有权限,查不了 v$parameters
      

  6.   

    show parameter db_cache_size
      

  7.   

    alter system set  parmter=****** scope=both;
      

  8.   

    其实并不是返回值不能大于4K,而是oracle的列长度不能大于4K,在用oracle函数的时候,函数被当做了伪列使用,所以,不能超长。
    测试如下:
    create or replace function at1 return varchar2 is
      Result varchar2(32766);
    begin
       Result :=  rpad('a', 5000, 'b');
      return(Result);
    end at1;create or replace procedure ap1 is
      res varchar2(32766);
    begin
      res := rpad('a',5000,'b');
      dbms_output.put_line(res);
    end ap1;
    SQL> set long 10000;
    SQL> set linesize 10000;
    SQL> set serverout on size 10000;
    SQL> select at1() from dual;
     
    select at1() from dual
     
    ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    ORA-06512: at "QMYSTEST.AT1", line 5
     
    SQL> execute ap1;
     
    abb.....过程略了,csdn认为我刷屏呢,自己测试吧b 
     
    PL/SQL procedure successfully completed