Sql Oracle过程调用字符串太长

Sql Oracle过程调用字符串太长,sql,oracle,procedure,Sql,Oracle,Procedure,你好,我有一个程序 PROCEDURE PR_SEARCH(P_FABRIC IN VARCHAR2, P_ORG IN NUMBER,P_POS IN VARCHAR2,P_SICIL IN clob,P_EXISTS IN clob, PRC OUT SYS_REFCURSOR) IS BEGIN OPEN PRC FOR SELECT SICIL_KOD AS SICIL,ad ||' '||soyad as NAME_SURNAME FROM

你好,我有一个程序

    PROCEDURE PR_SEARCH(P_FABRIC IN VARCHAR2, P_ORG IN NUMBER,P_POS IN VARCHAR2,P_SICIL IN clob,P_EXISTS IN clob, PRC OUT SYS_REFCURSOR) IS BEGIN  
        OPEN PRC FOR
        SELECT SICIL_KOD AS SICIL,ad ||' '||soyad as NAME_SURNAME FROM
        BMS.GEN_PERSONEL GP WHERE SICIL_KOD>10000 AND GP.PERSONEL_ALT_ALAN  IN ('IZ01','IZ02','IZ03','IZ04') AND
        (P_FABRIC='-1' OR GP.PERSONEL_ALT_ALAN=P_FABRIC) 
        AND
        (P_ORG=-1 OR GP.SAP_ORG_KOD=P_ORG)
         AND
        (P_POS='-1' OR GP.POZISYON_ACIKLAMA=P_POS)
        AND
        (P_SICIL IS NULL OR GP.SICIL_KOD IN (select regexp_substr(to_char(P_SICIL),'[^,]+', 1, level) AS DEPTS from dual connect by regexp_substr(to_char(P_SICIL), '[^,]+', 1, level) is not null))
        AND 
        (P_EXISTS IS NULL OR GP.SICIL_KOD NOT IN (select regexp_substr(to_char(P_EXISTS),'[^,]+', 1, level) AS DEPTS from dual connect by regexp_substr(to_char(P_EXISTS), '[^,]+', 1, level) is not null))
        ORDER BY SICIL_KOD
        ;
    END;
我的问题是p_SICIL或p_EXISTS可能太长,所以所有长度都可能超过4000个字符。 当我调用这个过程时,它给出了以下错误

ORA-22835:缓冲区太小,无法进行CLOB到CHAR或BLOB到RAW的转换 实际值:14103,最大值:4000

如果我不使用字符来表示CLOB,那么我将取下面的错误

ORA-00932:不一致的数据类型:应为-获取CLOB ORA-06512:在 CARDREADER.PA_卡丁车阅读器,第285行ORA-06512:第2行

如果我不使用clob并使用varchar2作为参数类型,那么我得到了错误

ORA-01460:请求的转换未实现或不合理 ORA-06512:at读卡器。PA_KART_读卡器,第284行ORA-06512:at行 二,

如何在oracle中解决此问题


提前感谢

问题在于,在使用to_CHAR函数时,您试图将CLOB转换为VARCHAR2。REGEXP\u SUBSTR可以将CLOBs作为输入参数,因此请尝试不强制转换CLOBs,而是强制转换REGEXP\u SUBSTR的结果以与SICIL\u KOD进行比较

VARCHAR2中的程序PR_搜索P_结构, P_组织的数量, VARCHAR2的P_POS, 在CLOB的P_SICIL, P_存在于CLOB中, PRC输出系统参考光标 是 开始 打开PRC,选择SICIL|u KOD作为SICIL,ad | |“”| | soyad作为姓名 来自BMS.GEN_个人总经理 其中SICIL_KOD>10000 和IZ01中的艾伦医生, ‘IZ02’, ‘IZ03’, ‘IZ04’ P_FABRIC='-1'或GP.PERSONEL_ALT_ALAN=P_FABRIC P_ORG=-1或GP.SAP_ORG_KOD=P_ORG P_POS='-1'或GP.POZISYON_ACIKLAMA=P_POS P_SICIL是空的 或选择中的GP.SICIL\u KOD以\u CHAR REGEXP\u SUBSTR P\u SICIL, '[^,]+', 1. 部门级别 来自双重 通过REGEXP\u SUBSTR P\u SICIL连接, '[^,]+', 1. 数量 不为空 P_EXISTS为空 或GP.SICIL_KOD不在SELECT TO_CHAR REGEXP_SUBSTR P_存在中, '[^,]+', 1. 部门级别 来自双重 通过REGEXP\u SUBSTR P\u连接存在, '[^,]+', 1. 数量 不为空 由SICIL_KOD订购; 终止 终止
谢谢,但我第一次尝试时没有使用to_char,然后我得到了一个错误,我用这个错误更新了问题。只是添加了一个更新。尝试强制转换REGEXP_SUBSTR的结果,而不是整个CLOB。