[Oracle] [ODBC] [Ora] ORA-06502:PL / SQL:数值或值错误:字符串缓冲区太小

时间:2018-03-20 13:56:36

标签: oracle stored-procedures plsql odbc

我在执行此过程时在客户端遇到此错误:

    create or replace procedure remove_indice (p_tabela in varchar2, p_indice in varchar2) is
        v_qtde integer;
    begin

        select count(*) into v_qtde from user_indexes where index_name = upper(p_indice);

        if v_qtde = 0 then 
            begin
                dbms_output.put_line('indice ' || p_indice || ' nao removido (nao existe).'); 
            end;
            else
            begin   
                execute immediate('drop index ' || p_indice);
                dbms_output.put_line('indice ' || p_indice || ' removido com sucesso.'); 
            end;
        end if;
    exception
        when others then
            dbms_output.put_line('nao foi possivel remover o indice ' || p_indice);
            dbms_output.put_line('erro: ' || sqlerrm);
            raise;
    end;

S1000 6502 {[Oracle] [ODBC] [Ora] ORA-06502:PL / SQL:数值或值错误:字符串缓冲区太小 ORA-06512:at" SITEF.REMOVE_INDICE",第21行 ORA-06512:第1行

{call remove_indice(' conc_ticket_ll',' conc_ticket_ll_indx1')}

然后我将程序更改为此,因为错误似乎发生在" raise":

    create or replace procedure remove_indice (p_tabela in varchar2, p_indice in varchar2) is
        v_qtde integer;
    begin

        select count(*) into v_qtde from user_indexes where index_name = upper(p_indice);

        if v_qtde = 0 then 
            begin
                dbms_output.put_line('indice ' || p_indice || ' nao removido (nao existe).'); 
            end;
            else
            begin   
                execute immediate('drop index ' || p_indice);
                dbms_output.put_line('indice ' || p_indice || ' removido com sucesso.'); 
            end;
        end if;
    end;

然后我明白了:

S1000 6502 {[Oracle] [ODBC] [Ora] ORA-06502:PL / SQL:数值或值错误:字符串缓冲区太小 ORA-06512:第1行 ORA-06512:at" SITEF.REMOVE_INDICE",第13行 ORA-06512:第1行

在我的环境中,错误不会发生。该过程简单检查索引是否存在,如果存在则将其删除。如果不存在,请不要错误地停止应用程序(它是安装程序)。

一些说明: 1-通过ODBC建立连接; 2-在客户端环境中,错误不会通过SqlPlus发生:

    set serveroutput on;
    begin
        remove_indice ('conc_ticket_ll', 'conc_ticket_ll_indx1');
    end;

indice conc_ticket_ll_indx1 removido com   Sucesso的。

PL / SQL程序已成功完成。

我在同一版本的同一个操作系统中使用了<3> Oracle ODBC驱动程序。

0 个答案:

没有答案