PL / SQL VARCHAR2最大长度

时间:2016-12-15 11:28:04

标签: oracle11g

我似乎无法在11G中使用超过4000个字符的VARCHAR2,但我发现我应该可以使用32776。

PROCEDURE prcName
         (piCoSite              IN CHAR
         ,piRaciId              IN NUMBER
         ,piDept                IN VARCHAR2
         ,poRecordset          OUT SYS_REFCURSOR) AS 

  locSql1     VARCHAR2(32000 CHAR);

BEGIN


  locSql1 :=
  'SELECT' ||
     '  H.TABLE_HEAD_ID ' ||
     ' ,H.TABLE_HEAD_DEPT ' ||
     ' ,H.TABLE_HEAD_DESCRIPTION ' ||
     ' ,H.TABLE_HEAD_STATUS ' ||
     ' ,H.TABLE_HEAD_SCOPE ' ||
     ' ,H.TABLE_HEAD_ORIGINATOR ' ||
     ' ,H.TABLE_HEAD_SUB_CATEGORY ' ||
     ' ,H.TABLE_HEAD_HIGH_RISK ' ||
     ' ,TRIM(C0.CNTCT_FIRSTNAME) || '' '' || TRIM(C0.CNTCT_SURNAME) wsRaisedBy ' ||
     ' ,(SELECT COUNT(*) FROM TABLE_EMPLOYEES E WHERE E.TABLE_EMPS_CO_SITE = H.TABLE_HEAD_CO_SITE AND E.TABLE_EMPS_ID = H.TABLE_HEAD_ID) wsNoEmployees ' ||
     ' ,(SELECT COUNT(*) FROM TABLE_TASKS     T WHERE T.TABLE_TASK_CO_SITE = H.TABLE_HEAD_CO_SITE AND T.TABLE_TASK_ID = H.TABLE_HEAD_ID) wsNoActions ' ||
  ' FROM TABLE_HEADER H ' ||
  ' LEFT  JOIN CONTACTS C0 ' ||
  '         ON C0.CNTCT_CO_SITE    = H.TABLE_HEAD_CO_SITE ' ||
  '        AND C0.CNTCT_CODE       = H.TABLE_HEAD_ORIGINATOR  ' ||
  ' WHERE  H.TABLE_HEAD_CO_SITE      =  ''' || piCoSite  || '''' ||
  '   AND (H.TABLE_HEAD_ID           =  ''' || piRaciId  || '''' || ' OR ''' || piRaciId || ''' = 0)      ' ||
  '   AND (H.TABLE_HEAD_DEPT        IN (''' || piDept    || ''' )     OR ''' || piDept   || ''' IS NULL ) ' ||
  '   AND (H.TABLE_HEAD_ORIGINATOR  IN ('   || piUser    ||   ' )     OR ''' || piUser   || ''' IS NULL ) ' ||
  '   AND (H.TABLE_HEAD_STATUS      IN ('   || piStatus  ||   ' )     OR ''' || piStatus || ''' IS NULL ) ' ||
  ' ORDER BY TABLE_HEAD_ID ';

  dbms_output.put_line(locSql1);

  OPEN poRecordset FOR locSql1;

当我复制/粘贴locSql1变量时,它无法接近32000个字符,但它会被截断。

数据库中是否有某些内容需要更改,或者我是否遗漏了某些内容?

感谢。

0 个答案:

没有答案