我定义了一个函数,返回值是一个string类型的。可是我返回的字符串长度为4217的时候,报错。如何解决这个问题啊。

解决方案 »

  1.   

    FUNCTION EVDB_COMM_DENM_FNC(V_EVDB_RCRD_ID IN NUMBER,
                                  V_FLG          IN VARCHAR2) RETURN STRING;
    当我调用的时候select  EVDB_DATA_ACCESS_PKG.EVDB_COMM_DENM_FNC(2469010,'SYNYM') from dual
    提示错误。超出长度ORA-06502。
      

  2.   

    在SQL语句的字符串应该有限制的吧。
      

  3.   

    在sql语句中使用长度是有限制的,如:varchar2都被限制成了4000
    虽然在pl/sql中可定义varchar2的长度可为65536
    没使用过string,估计类似
      

  4.   

    EVDB_COMM_DENM_FNC把这个函数的方法体都发出来....谢谢!
      

  5.   

    sorry,更正一下,在pl/sql中可定义varchar2的长度最大可为32767
      

  6.   

    IF V_FLG = 'SYNYM' THEN
          FOR SYNON_REC IN (SELECT DISTINCT SYNYM_TM.DRUG_SYNYM_NM
                              FROM EVDB_DRUG_SYNYM_TM SYNYM_TM
                             WHERE SYNYM_TM.EVDB_RCRD_ID = V_EVDB_RCRD_ID) LOOP
            IF V_RESULT IS NULL THEN
              V_RESULT := SYNON_REC.DRUG_SYNYM_NM;
            ELSE
              V_RESULT := V_RESULT || ';' || SYNON_REC.DRUG_SYNYM_NM;
            END IF;
          END LOOP;
        END IF; RETURN(V_RESULT);
    虽然我定义返回值是string类型的。但是pl/sql仍然限制返回值为4000,但是内部可以用string来存储32767的数据。我想是这么回事的。
      

  7.   

    ORACLE内定义的最大字符长度为4000,超了可以可以考虑return之前将其连接起来,
    即return str||str