› 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
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))) < 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))) >= 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)))) || 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))) < 125 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)
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