我在更新后的触发器中在oracle中调用一个函数。函数正在返回一个等于执行选择和插入操作的值。问题是,当我在触发器中调用此函数时,由于未执行相应的插入操作而被终止;而当我分别执行该功能时,它工作正常。同样,如果通过删除函数返回的条件来运行触发器,则它将按预期执行。
功能:
CREATE OR REPLACE FUNCTION VERIFY_FINAL
(case_id IN number)
RETURN varchar2
IS
is_marked_final varchar2(4);
loop_count number(2);
cursor c1 is
SELECT sub_case_status from
cdm_master_sub_case
where master_id = (case_id);
BEGIN
is_marked_final := 'Y';
loop_count := 0;
FOR rec in c1
LOOP
IF (rec.sub_case_status = '1') THEN
is_marked_final := 'Y';
ELSIF (rec.sub_case_status = '2') THEN
is_marked_final := 'Y';
ELSE
loop_count := loop_count + 1;
END if;
END LOOP;
IF (loop_count > 0) THEN
is_marked_final := 'N';
END if;
RETURN is_marked_final;
END;
Trigger:
CREATE OR REPLACE TRIGGER CDM_MASTER_SUB_CASE_TRIGGER
AFTER UPDATE
on CDM_MASTER_SUB_CASE
FOR EACH ROW
DECLARE
check_var varchar2(4);
unique_id varchar2(100);
transaction_id number(10);
BEGIN
transaction_id := :new.MASTER_ID;
check_var := VERIFY_FINAL(transaction_id);
IF (check_var = 'Y') THEN
select UNIQUE_CUST_ID INTO unique_id from ASM355.cdm_matches where MASTER_ID = :new.MASTER_ID and rownum = 1;
INSERT INTO tracking_final_cases (MASTER_ID,unique_cust) values (:new.master_id,unique_id);
END if;
END;
如果有人能指出正确的方向,我将不胜感激。
我不知道您的表数据,但是您的函数可以返回'N',因此它不符合您的触发条件(check_var ='Y')。
如果运行这样的命令:
update CDM_MASTER_SUB_CASE
set sub_case_status = 3;
您可能会遇到问题。