PL / SQL Triggger不删除

时间:2020-11-12 13:40:50

标签: sql plsql

我遇到以下问题,当我尝试测试此触发器时,它不执行删除部分,其他部分工作正常,已经经过测试,但是删除不起作用时,我在做错了吗?

create or replace 
trigger TR_RIESGO_COD_INT
BEFORE INSERT OR DELETE OR UPDATE OF TIPO_MODELO, VALOR_SCORE
ON SCOREO_INTERNO 
FOR EACH ROW
DECLARE
nExiste NUMBER;
BEGIN
  
    SELECT COUNT(*)
    INTO nExiste
    FROM perfil_clientes
    where id_cliente = :NEW.ID_CLIENTE;
    
    if nExiste != 0 THEN
  
        IF INSERTING THEN 
        
            UPDATE PERFIL_CLIENTES
            SET CODIGO_RIESGO_INT = (SELECT RIESGO_CODIGO
                                FROM RANGO_SCOREO_INTERNO
                                WHERE TIPO_MODELO = :NEW.TIPO_MODELO
                                AND SCORE_DESDE <= :NEW.VALOR_SCORE
                                AND SCORE_HASTA >= :NEW.VALOR_SCORE)
            WHERE ID_CLIENTE = :NEW.ID_CLIENTE;
    
        ELSIF DELETING THEN
        
            UPDATE PERFIL_CLIENTES
            SET CODIGO_RIESGO_INT = NULL
            WHERE ID_CLIENTE = :NEW.ID_CLIENTE;
            
        ELSIF UPDATING THEN
            
            IF :NEW.VALOR_SCORE != :OLD.VALOR_SCORE OR :NEW.TIPO_MODELO != :OLD.TIPO_MODELO THEN 
            
                UPDATE PERFIL_CLIENTES
                SET CODIGO_RIESGO_INT = (SELECT RIESGO_CODIGO
                                FROM RANGO_SCOREO_INTERNO
                                WHERE TIPO_MODELO = :NEW.TIPO_MODELO
                                AND SCORE_DESDE <= :NEW.VALOR_SCORE
                                AND SCORE_HASTA >= :NEW.VALOR_SCORE)
                WHERE ID_CLIENTE = :NEW.ID_CLIENTE;
            
            END IF; 
    
        END IF;
    END IF;
END;
/

1 个答案:

答案 0 :(得分:0)

我不得不更改代码,因为它是错误的,但是现在可以正常工作了,谢谢@nfgl

CREATE OR REPLACE
TRIGGER TR_RIESGO_COD_INT
BEFORE INSERT OR DELETE OR UPDATE OF TIPO_MODELO, VALOR_SCORE
ON SCOREO_INTERNO 
FOR EACH ROW
DECLARE
nExiste NUMBER;
BEGIN
    
    IF INSERTING THEN 
    
        SELECT COUNT(*)
        INTO nExiste
        FROM perfil_clientes
        WHERE id_cliente = :NEW.ID_CLIENTE;
        
        IF nExiste != 0 THEN

            UPDATE PERFIL_CLIENTES
            SET CODIGO_RIESGO_INT = (SELECT RIESGO_CODIGO
                                FROM RANGO_SCOREO_INTERNO
                                WHERE TIPO_MODELO = :NEW.TIPO_MODELO
                                AND SCORE_DESDE <= :NEW.VALOR_SCORE
                                AND SCORE_HASTA >= :NEW.VALOR_SCORE)
            WHERE ID_CLIENTE = :NEW.ID_CLIENTE;
            
        END IF;

    ELSIF DELETING THEN
    
        SELECT COUNT(*)
        INTO nExiste
        FROM perfil_clientes
        WHERE id_cliente = :OLD.ID_CLIENTE;
        
        IF nExiste != 0 THEN

            UPDATE PERFIL_CLIENTES
            SET CODIGO_RIESGO_INT = NULL
            WHERE ID_CLIENTE = :OLD.ID_CLIENTE;
            
        END IF;
        
    ELSIF UPDATING THEN
        
        
        SELECT COUNT(*)
        INTO nExiste
        FROM perfil_clientes
        WHERE id_cliente = :OLD.ID_CLIENTE;
        
        IF nExiste != 0 THEN

            IF :NEW.VALOR_SCORE != :OLD.VALOR_SCORE OR :NEW.TIPO_MODELO != :OLD.TIPO_MODELO THEN 
        
                UPDATE PERFIL_CLIENTES
                SET CODIGO_RIESGO_INT = (SELECT RIESGO_CODIGO
                                FROM RANGO_SCOREO_INTERNO
                                WHERE TIPO_MODELO = :NEW.TIPO_MODELO
                                AND SCORE_DESDE <= :NEW.VALOR_SCORE
                                AND SCORE_HASTA >= :NEW.VALOR_SCORE)
                WHERE ID_CLIENTE = :OLD.ID_CLIENTE;
        
            END IF; 
            
        END IF;

    END IF;
END;
/
相关问题