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;
/
我有这个代码来获取财政年度。
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;
/