Pular para o conteúdo

Fóruns SQL e PL/SQL ORA-06502: PL/SQL: numeric or value error: character string ORA-06502: PL/SQL: numeric or value error: character string

#90117
vieira
Participante

    Olá leonardo, obrigado pela atenção….

    Eu já tinha testado também oque você falow ^^ hahaa, mas também nao funcionou, não se se ajuda mas vou postar a trigger toda abaixo

    CREATE OR REPLACE TRIGGER tgr_GeraCodServico

    BEFORE INSERT OR UPDATE

    ON CADMAT

    REFERENCING NEW AS novo_campo

    FOR EACH ROW

    DECLARE
    Pragma Autonomous_Transaction;

    V_COD_CADMAT CADMAT.cod_mat_cadmat%TYPE;
    V_DESCR_TABCAR CHAR(40);
    V_COD_ICMS CHAR(20);
    V_NEW_VALUE CHAR(2);

    BEGIN

    SELECT COD_MAT_CADMAT INTO V_COD_CADMAT FROM CADMAT WHERE COD_MAT_CADMAT = :novo_campo.COD_MAT_CADMAT;

    SELECT DESCR_MAT_CADMAT INTO V_DESCR_TABCAR FROM CADMAT WHERE COD_MAT_CADMAT = :novo_campo.COD_MAT_CADMAT;

    SELECT COD_ICMS_RET_CADMAT INTO V_COD_ICMS FROM CADMAT WHERE COD_MAT_CADMAT = V_COD_CADMAT;

    SELECT CASE
    WHEN MAX( ASCII(SUBSTR (COD_TABCAR,0,2))) = 33 AND (MAX( ASCII(SUBSTR (COD_TABCAR,2,3)))) = 125 THEN CHR(MAX( ASCII(SUBSTR (COD_TABCAR,0,2))) + 2 ) || CHR ( MAX(ASCII(SUBSTR (COD_TABCAR,2,3))))
    WHEN MAX( ASCII(SUBSTR (COD_TABCAR,0,2))) = 33 AND MAX( ASCII(SUBSTR (COD_TABCAR,2,3))) = 35 AND MAX( ASCII(SUBSTR (COD_TABCAR,0,2))) = 35 AND MAX( ASCII(SUBSTR (COD_TABCAR,0,2))) < 38 AND MAX( ASCII(SUBSTR (COD_TABCAR,2,3))) < 125 THEN CHR(MAX( ASCII(SUBSTR (COD_TABCAR,0,2)))) || CHR(MAX( ASCII(SUBSTR (COD_TABCAR,2,3)) + 1))

            WHEN MAX( ASCII(SUBSTR (COD_TABCAR,0,2))) = 38 AND  MAX( ASCII(SUBSTR (COD_TABCAR,2,3))) = 125 THEN CHR(MAX( ASCII(SUBSTR (COD_TABCAR,0,2)))) || CHR(MAX( ASCII(SUBSTR (COD_TABCAR,0,2))) + 2)
            WHEN MAX( ASCII(SUBSTR (COD_TABCAR,0,2))) = 38 AND  MAX( ASCII(SUBSTR (COD_TABCAR,2,3))) = 40 AND MAX( ASCII(SUBSTR (COD_TABCAR,0,2))) = 40 AND MAX( ASCII(SUBSTR (COD_TABCAR,0,2))) &lt; 93 AND MAX( ASCII(SUBSTR (COD_TABCAR,2,3))) = 40 AND MAX( ASCII(SUBSTR (COD_TABCAR,0,2))) = 93 AND MAX( ASCII(SUBSTR (COD_TABCAR,2,3))) = 125 THEN CHR(MAX( ASCII(SUBSTR (COD_TABCAR,0,2))) + 2) || CHR(MAX( ASCII(SUBSTR (COD_TABCAR,2,3))))
            WHEN MAX( ASCII(SUBSTR (COD_TABCAR,0,2))) &gt;= 40 AND MAX( ASCII(SUBSTR (COD_TABCAR,0,2))) &lt; 93 AND MAX( ASCII(SUBSTR (COD_TABCAR,2,3))) &lt; 125 THEN CHR(MAX( ASCII(SUBSTR (COD_TABCAR,0,2)))) || CHR(MAX(ASCII(SUBSTR (COD_TABCAR,2,3))) + 1)
    
            WHEN MAX( ASCII(SUBSTR (COD_TABCAR,0,2))) = 95 AND  MAX( ASCII(SUBSTR (COD_TABCAR,2,3))) = 125 THEN CHR(MAX( ASCII(SUBSTR (COD_TABCAR,0,2))) + 2 ) || CHR(MAX( ASCII(SUBSTR (COD_TABCAR,2,3))))
            WHEN MAX( ASCII(SUBSTR (COD_TABCAR,0,2))) = 95 AND  MAX( ASCII(SUBSTR (COD_TABCAR,2,3))) = 97 AND MAX(ASCII(SUBSTR (COD_TABCAR,0,2))) = 97 AND MAX(ASCII(SUBSTR (COD_TABCAR,0,2))) &lt; 125 AND MAX(ASCII(SUBSTR(COD_TABCAR,2,3))) &lt; 125 THEN CHR(MAX(ASCII(SUBSTR(COD_TABCAR,0,2)))) || CHR(MAX(ASCII(SUBSTR (COD_TABCAR,2,3))) + 1) 
       END COD_TABCAR INTO V_NEW_VALUE FROM TABCAR;
    

    IF V_COD_ICMS = ' ' THEN

    INSERT INTO TABCAR VALUES(V_NEW_VALUE , V_DESCR_TABCAR);       
    UPDATE CADMAT SET COD_ICMS_RET_CADMAT = V_NEW_VALUE WHERE COD_MAT_CADMAT = V_COD_CADMAT;
    

    END IF ;
    commit;
    END tgr_GeraCodServico;

    Deixa eu explicar mais ou menos a Trigger:
    Objetivo: verificar qual o ultimo item existente na TABCAR, e adicionar mais um, de acordo com a tabela ASCII lá ….

    Grato desde já
    Lucas