PL/SQL触发器未删除
我遇到了以下问题,当我尝试测试这个触发器时,它不执行删除部分,其他部分工作正常已经测试过了,但是当删除不工作时,我做错了什么PL/SQL触发器未删除,sql,plsql,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 COUN
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;
/
我不得不稍微修改一下代码,因为它是错误的,但现在它工作了,谢谢@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;
/
请添加文本数据示例!请同时添加预期结果。还要标记您的数据库…我猜:NEW.ID\u CLIENTE在删除时为null,类似于:OLD.ID\u CLIENTE不为空。我已经尝试过了,同样的情况发生了idk@nfgl您是否也修改了将某些内容放入nExiste的查询?