如果没有其他嵌套的PL / SQL ORACLE

问题描述

我是在Oracle数据库中使用PL / SQL的初学者,我只想开发以前已经存在的编码。我想在此代码ELSIF updating THEN H_TYP := 'U';之后加上新条件和语句“如果然后嵌套” 但是我对我的代码感到困惑,我还没有找到解决我的代码的方法。

这是我的代码;

create or replace TRIGGER TMCI_SUB_ITEM_MASTER_TR_R 
AFTER DELETE OR INSERT OR UPDATE ON TMCI_SUB_ITEM_MASTER 
REFERENCING OLD AS OLD NEW AS NEW 
FOR EACH ROW
BEGIN
DECLARE
 H_ID TMCI_SUB_ITEM_MASTER_R.HST_ID%TYPE;
 H_TYP TMCI_SUB_ITEM_MASTER_R.TSK%TYPE;
 rdate DATE;
 t_max_rev TMCI_SUB_ITEM_MASTER_R.REV%TYPE;
 H_INS_USR_ID TMCI_SUB_ITEM_MASTER_R.INS_USR_ID%TYPE;

 BEGIN
  rdate := SYSDATE;

IF INSERTING THEN H_TYP := 'I';
   ...

ELSIF updating THEN H_TYP := 'U';
   IF H_INS_USR_ID = 'SL01' THEN
      SELECT NVL(MAX(Rev),0) INTO t_max_rev FROM TMCI_SUB_ITEM_MASTER_R WHERE ITM_CD = :old.ITM_CD;
      INSERT INTO TMCI_SUB_ITEM_MASTER_R
        VALUES( H_ID,H_TYP,:old.ITM_CD,CASE WHEN :old.ITM_NM <> :new.ITM_NM THEN CONCAT(:new.ITM_NM,'')
                     ELSE :new.ITM_NM
                END);
   ELSE
      SELECT NVL(MAX(Rev),'*')
                     ELSE :new.ITM_NM
                END);
   END IF;
ELSIF deleting THEN H_TYP := 'D';
   ...
END IF;
  END;
END;

如果我通过 SL01 登录,结果将始终读入最后一条语句(ELSE ...)。它应该执行第一条语句。 我需要解决此问题的帮助。

解决方法

似乎您从未将H_INS_USR_ID设置为任何值。我认为这是针对用户的传入行?如果是这样,那么

H_INS_USR_ID TMCI_SUB_ITEM_MASTER_R.INS_USR_ID%TYPE;

成为

H_INS_USR_ID TMCI_SUB_ITEM_MASTER_R.INS_USR_ID%TYPE := :new.INS_USR_ID;

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...