SQL Oracle Apex 中的会计年度触发器

SQL trigger for fiscal year in Oracle Apex

我有这个代码来获取财政年度。

from
(SELECT

CASE EXTRACT (MONTH FROM SYSDATE)WHEN 1 THEN EXTRACT(YEAR FROM SYSDATE)-1 
WHEN 2 THEN EXTRACT(YEAR FROM SYSDATE)-1
WHEN 3 THEN EXTRACT(YEAR FROM SYSDATE)-1
ELSE EXTRACT(YEAR FROM SYSDATE)
END
AS PR_YEAR  , 


CASE EXTRACT (MONTH FROM SYSDATE)
    WHEN 04 THEN 1
    WHEN 05 THEN 1
    WHEN 06 THEN 1
    WHEN 07 THEN 1
    WHEN 08 THEN 1
    WHEN 09 THEN 1
    WHEN 10 THEN 2
    WHEN 11 THEN 2
    WHEN 12 THEN 2
    WHEN 01 THEN 2
    WHEN 02 THEN 2
    WHEN 03 THEN 2
END AS  PR_MONTH
 FROM dual)

我想使用触发器从 Oracle 数据库 table 名称 的列名 Fiscaly 中插入数据]MM_Inventory 对于 Apex,我是这样的:

create or replace TRIGGER add_fiscaly
BEFORE INSERT ON MM_Inventory
FOR EACH ROW
BEGIN
    SELECT PR_YEAR||PR_MONTH
from
(SELECT

CASE EXTRACT (MONTH FROM SYSDATE)WHEN 1 THEN EXTRACT(YEAR FROM SYSDATE)-1 
WHEN 2 THEN EXTRACT(YEAR FROM SYSDATE)-1
WHEN 3 THEN EXTRACT(YEAR FROM SYSDATE)-1
ELSE EXTRACT(YEAR FROM SYSDATE)
END
AS PR_YEAR  , 


CASE EXTRACT (MONTH FROM SYSDATE)
    WHEN 04 THEN 1
    WHEN 05 THEN 1
    WHEN 06 THEN 1
    WHEN 07 THEN 1
    WHEN 08 THEN 1
    WHEN 09 THEN 1
    WHEN 10 THEN 2
    WHEN 11 THEN 2
    WHEN 12 THEN 2
    WHEN 01 THEN 2
    WHEN 02 THEN 2
    WHEN 03 THEN 2
END AS  PR_MONTH
 FROM dual)
END;

但我不知道它有什么问题或遗漏了它,我将不胜感激你的帮助。

您需要在此处的触发器中使用 INTO 子句:

SELECT PR_YEAR||PR_MONTH
  INTO :NEW.Fiscaly
from ...

我相信这个简化的代码可以达到同样的目的:

create or replace TRIGGER add_fiscaly
BEFORE INSERT ON MM_Inventory
FOR EACH ROW
BEGIN
   :NEW.Fiscaly :=  CASE WHEN EXTRACT (MONTH FROM SYSDATE) < 4
                       THEN EXTRACT(YEAR FROM SYSDATE)-1 
                       ELSE EXTRACT(YEAR FROM SYSDATE)
                    END
                    || CASE WHEN EXTRACT (MONTH FROM SYSDATE) BETWEEN 4 AND 9
                          THEN 1
                          ELSE 2
                       END;
END;
/