PL/SQL 插入前的 Oracle 触发器无法获取新的唯一主 ID

PL/SQL Oracle Trigger Before Insert Can't get New Unique Primary ID

怎么了……??请检查我的触发器

create or replace
TRIGGER TBL_AE_BI
BEFORE UPDATE
ON TBL_AE
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW

DECLARE
KD_AE VARCHAR2 (6);

BEGIN

  SELECT AE_ID INTO KD_AE FROM (
  SELECT KDMAX,(SELECT TO_CHAR('AE')KD FROM DUAL)||
        (CASE WHEN KDMAX>=0 AND  KDMAX<10 THEN '000'||KDMAX
              WHEN KDMAX>=10 AND  KDMAX<100 THEN '00'||KDMAX
              WHEN KDMAX>=100 AND  KDMAX<1000 THEN '0'||KDMAX
              ELSE TO_CHAR(KDMAX)
         END)AE_ID
  FROM (SELECT (NVL(MAX(TO_NUMBER(SUBSTR(AE_ID,3,4))),0)+1)KDMAX FROM TBL_AE)
  );

  :NEW.AE_ID:=KD_AE;
  :NEW.INSERT_DATE:= SYSDATE; 

END;

当我向 table 中插入一条新记录时,结果出错,无法将 NULL 插入 AE_ID。

但是当我在 SQL window 中执行以下代码时

SELECT AE_ID as KD_AE FROM (
SELECT KDMAX,(SELECT TO_CHAR('AE')KD FROM DUAL)||
  (CASE WHEN KDMAX>=0 AND  KDMAX<10 THEN '000'||KDMAX
        WHEN KDMAX>=10 AND  KDMAX<100 THEN '00'||KDMAX
        WHEN KDMAX>=100 AND  KDMAX<1000 THEN '0'||KDMAX
        ELSE TO_CHAR(KDMAX)
   END)AE_ID
FROM (SELECT (NVL(MAX(TO_NUMBER(SUBSTR(AE_ID,3,4))),0)+1)KDMAX FROM TBL_AE)
)

结果没有错误,我得到了一个新的唯一ID。

喜欢

将更新前更改为插入前

create or replace
TRIGGER TBL_AE_BI
BEFORE INSERT --Changed
ON TBL_AE
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW

DECLARE
KD_AE VARCHAR2 (6);

BEGIN

  SELECT AE_ID INTO KD_AE FROM (
  SELECT KDMAX,(SELECT TO_CHAR('AE')KD FROM DUAL)||
        (CASE WHEN KDMAX>=0 AND  KDMAX<10 THEN '000'||KDMAX
              WHEN KDMAX>=10 AND  KDMAX<100 THEN '00'||KDMAX
              WHEN KDMAX>=100 AND  KDMAX<1000 THEN '0'||KDMAX
              ELSE TO_CHAR(KDMAX)
         END)AE_ID
  FROM (SELECT (NVL(MAX(TO_NUMBER(SUBSTR(AE_ID,3,4))),0)+1)KDMAX FROM TBL_AE)
  );

  :NEW.AE_ID:=KD_AE;
  :NEW.INSERT_DATE:= SYSDATE; 

END;