我遇到以下问题,当我尝试测试此触发器时,它不执行删除部分,其他部分工作正常,已经经过测试,但是删除不起作用时,我在做错了吗?
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;
/
答案 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;
/