PL / SQL通过触发器调用时无法获取函数的返回值-Oracle

问题描述 投票:0回答:1

我在更新后的触发器中在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;

如果有人能指出正确的方向,我将不胜感激。

oracle plsql triggers oracle-sqldeveloper
1个回答
0
投票

我不知道您的表数据,但是您的函数可以返回'N',因此它不符合您的触发条件(check_var ='Y')。

如果运行这样的命令:

update CDM_MASTER_SUB_CASE
set sub_case_status = 3;

您可能会遇到问题。

© www.soinside.com 2019 - 2024. All rights reserved.