這是我的問題的情況:
我們公司正在銷售帶有資料輸入的 BI 應用程式,它基本上為值發生變化的每一行運行更新。
- 我正在嘗試為我們的用戶構建一個創建預算的功能。
- 在我的表中,我有 12 個欄位用于帳戶過帳(該月的借方 - 貸方)和 12 個用于每個月的帳戶余額。
- 我希望如果我的用戶在過賬上輸入資料,月份的余額會相應地更新,如果我的用戶在余額上輸入資料,則過賬會相應地進行調整
- 不能同時對過賬和余額進行資料輸入(2 個單獨的作業表)
我在 SQL Server 中使用觸發器檢查過帳是否已更改,重新計算余額,反之亦然。
我試圖在 Oracle 中做同樣的事情(我們必須同時支持兩者,我不是 Oracle 專家)但我不斷收到 Mutation 錯誤,我想這是因為它陷入了一個回圈:發布 -> 更新余額 -> 更新發布 - > 等
我環顧四周并嘗試了不同的解決方案,例如在觸發器內更新之前禁用觸發器,并在使用匿名事務后重新啟用它,但更新無法解決。
我試圖在觸發器中添加一個更新為 1 的標志,并僅在它的新值為 0 時才觸發觸發器(另一個觸發器將其重置為 0 之后),但它似乎不起作用。
我嘗試使用臨時表來記錄哪些行發生了更改,以查看它是發布更改還是余額更改,然后在沒有 FOR EACH ROW 的情況下運行更新,但它仍然導致問題。
有沒有人有任何想法?代碼是這樣的:
CREATE OR REPLACE TRIGGER "QA_BUD_V8"."UPDATE_BUDGET_VALUES"
AFTER UPDATE OF
B_POSTING01,B_POSTING02,B_POSTING03,B_POSTING04,B_POSTING05,B_POSTING06,B_POSTING07,B_POSTING08,B_POSTING09,B_POSTING10,B_POSTING11,B_POSTING12
,B_OPENINGBALANCE
,B_ENDINGBALANCE01,B_ENDINGBALANCE02,B_ENDINGBALANCE03,B_ENDINGBALANCE04,B_ENDINGBALANCE05,B_ENDINGBALANCE06,B_ENDINGBALANCE07,B_ENDINGBALANCE08,B_ENDINGBALANCE09,B_ENDINGBALANCE10,B_ENDINGBALANCE11,B_ENDINGBALANCE12
ON "QA_BUD_V8".UDM_BUDGET_INWORK
FOR EACH ROW
BEGIN
IF (:OLD.B_OPENINGBALANCE <> :NEW.B_OPENINGBALANCE
OR :OLD.B_POSTING01 <> :NEW.B_POSTING01
OR :OLD.B_POSTING02 <> :NEW.B_POSTING02
OR :OLD.B_POSTING03 <> :NEW.B_POSTING03
OR :OLD.B_POSTING04 <> :NEW.B_POSTING04
OR :OLD.B_POSTING05 <> :NEW.B_POSTING05
OR :OLD.B_POSTING06 <> :NEW.B_POSTING06
OR :OLD.B_POSTING07 <> :NEW.B_POSTING07
OR :OLD.B_POSTING08 <> :NEW.B_POSTING08
OR :OLD.B_POSTING09 <> :NEW.B_POSTING09
OR :OLD.B_POSTING10 <> :NEW.B_POSTING10
OR :OLD.B_POSTING11 <> :NEW.B_POSTING11
OR :OLD.B_POSTING12 <> :NEW.B_POSTING12) THEN
[UPDATE Balances with Postings]
ELSIF (:OLD.B_ENDINGBALANCE01 <> :NEW.B_ENDINGBALANCE01
OR :OLD.B_ENDINGBALANCE02 <> :NEW.B_ENDINGBALANCE02
OR :OLD.B_ENDINGBALANCE03 <> :NEW.B_ENDINGBALANCE03
OR :OLD.B_ENDINGBALANCE04 <> :NEW.B_ENDINGBALANCE04
OR :OLD.B_ENDINGBALANCE05 <> :NEW.B_ENDINGBALANCE05
OR :OLD.B_ENDINGBALANCE06 <> :NEW.B_ENDINGBALANCE06
OR :OLD.B_ENDINGBALANCE07 <> :NEW.B_ENDINGBALANCE07
OR :OLD.B_ENDINGBALANCE08 <> :NEW.B_ENDINGBALANCE08
OR :OLD.B_ENDINGBALANCE09 <> :NEW.B_ENDINGBALANCE09
OR :OLD.B_ENDINGBALANCE10 <> :NEW.B_ENDINGBALANCE10
OR :OLD.B_ENDINGBALANCE11 <> :NEW.B_ENDINGBALANCE11
OR :OLD.B_ENDINGBALANCE12 <> :NEW.B_ENDINGBALANCE12) THEN
[UPDATE Postings with Balances]
END IF;
END;
觸發器中是否有一種方法可以在不觸發觸發器的情況下進行更新或退出導致突變的回圈?不幸的是,我只能控制代碼的某些 SQL 部分。我沒有在應用程式中明確使用一個模塊來進行預算,而是嘗試利用應用程式中的資料輸入功能來進行預算,因此我可以做的事情有局限性。
uj5u.com熱心網友回復:
好的,您似乎對我的評論有疑問,所以這里是如何使用包變數來解決您的問題的代碼示例:
CREATE OR REPLACE PACKAGE pk_trigger_chk IS
suppress BOOLEAN := FALSE;
END pk_trigger_chk;
/
該包創建了您需要放入觸發器定義中的變數。
CREATE OR REPLACE TRIGGER trg_1 AFTER UPDATE ON a FOR EACH ROW WHEN (new.val<>old.val)
BEGIN
IF NOT(pk_trigger_chk.suppress) THEN
pk_trigger_chk.suppress := TRUE;
UPDATE b
SET b.val = :new.val
WHERE b.id = :new.id;
pk_trigger_chk.suppress := FALSE;
END IF;
EXCEPTION WHEN OTHERS THEN
pk_trigger_chk.suppress := FALSE;
END trg_1;
/
這就是您更新觸發器以使用包變數的方式。
這是一個 DBFiddle,展示了它的實際效果。DBFiddle 顯示了使用包變數更新觸發器之前和之后。以及不使用它會得到的錯誤。(鏈接)
uj5u.com熱心網友回復:
我找到了我自己的答案。
最后,我太沉迷于 AFTER UPDATE。我將其更改為 BEFORE UPDATE,做了一個 if 檢查是否是過帳或余額發生了變化,然后我在更新之前為另一組度量分配了一個新值,我的問題全部解決了......我浪費了 2 天在這個哈哈
如果有興趣,這是代碼
CREATE OR REPLACE TRIGGER "QA_BUD_V8"."UPDATE_BUDGET_VALUES"
BEFORE UPDATE ON "QA_BUD_V8".UDM_BUDGET_INWORK
FOR EACH ROW
DECLARE
v_CLOSE_TO_ACCOUNT varchar2(100);
BEGIN
SELECT count(CASE WHEN CLOSETOACCOUNT IS NOT NULL AND CLOSETOACCOUNT <> ' ' THEN 1 END) into v_CLOSE_TO_ACCOUNT FROM "QA_BUD_V8".UDM_ACCOUNTS WHERE COA = :OLD.COA AND ACCOUNTNUM = :OLD.ACCOUNTID;
IF (:OLD.B_OPENINGBALANCE <> :NEW.B_OPENINGBALANCE
OR :OLD.B_POSTING01 <> :NEW.B_POSTING01
OR :OLD.B_POSTING02 <> :NEW.B_POSTING02
OR :OLD.B_POSTING03 <> :NEW.B_POSTING03
OR :OLD.B_POSTING04 <> :NEW.B_POSTING04
OR :OLD.B_POSTING05 <> :NEW.B_POSTING05
OR :OLD.B_POSTING06 <> :NEW.B_POSTING06
OR :OLD.B_POSTING07 <> :NEW.B_POSTING07
OR :OLD.B_POSTING08 <> :NEW.B_POSTING08
OR :OLD.B_POSTING09 <> :NEW.B_POSTING09
OR :OLD.B_POSTING10 <> :NEW.B_POSTING10
OR :OLD.B_POSTING11 <> :NEW.B_POSTING11
OR :OLD.B_POSTING12 <> :NEW.B_POSTING12) THEN
:NEW.B_ENDINGBALANCE01 := :NEW.B_OPENINGBALANCE :NEW.B_POSTING01;
:NEW.B_ENDINGBALANCE02 := :NEW.B_OPENINGBALANCE :NEW.B_POSTING01 :NEW.B_POSTING02
- CASE
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =12 THEN :NEW.B_ENDINGBALANCE01
ELSE 0
END;
:NEW.B_ENDINGBALANCE03 := :NEW.B_OPENINGBALANCE :NEW.B_POSTING01 :NEW.B_POSTING02 :NEW.B_POSTING03
- CASE
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =11 THEN :NEW.B_ENDINGBALANCE02
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =12 THEN :NEW.B_ENDINGBALANCE01
ELSE 0
END;
:NEW.B_ENDINGBALANCE04 := :NEW.B_OPENINGBALANCE :NEW.B_POSTING01 :NEW.B_POSTING02 :NEW.B_POSTING03 :NEW.B_POSTING04
- CASE
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =10 THEN :NEW.B_ENDINGBALANCE03
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =11 THEN :NEW.B_ENDINGBALANCE02
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =12 THEN :NEW.B_ENDINGBALANCE01
ELSE 0
END;
:NEW.B_ENDINGBALANCE05 := :NEW.B_OPENINGBALANCE :NEW.B_POSTING01 :NEW.B_POSTING02 :NEW.B_POSTING03 :NEW.B_POSTING04 :NEW.B_POSTING05
- CASE
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 9 THEN :NEW.B_ENDINGBALANCE04
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =10 THEN :NEW.B_ENDINGBALANCE03
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =11 THEN :NEW.B_ENDINGBALANCE02
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =12 THEN :NEW.B_ENDINGBALANCE01
ELSE 0
END;
:NEW.B_ENDINGBALANCE06 := :NEW.B_OPENINGBALANCE :NEW.B_POSTING01 :NEW.B_POSTING02 :NEW.B_POSTING03 :NEW.B_POSTING04 :NEW.B_POSTING05 :NEW.B_POSTING06
- CASE
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 8 THEN :NEW.B_ENDINGBALANCE05
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 9 THEN :NEW.B_ENDINGBALANCE04
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =10 THEN :NEW.B_ENDINGBALANCE03
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =11 THEN :NEW.B_ENDINGBALANCE02
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =12 THEN :NEW.B_ENDINGBALANCE01
ELSE 0
END;
:NEW.B_ENDINGBALANCE07 := :NEW.B_OPENINGBALANCE :NEW.B_POSTING01 :NEW.B_POSTING02 :NEW.B_POSTING03 :NEW.B_POSTING04 :NEW.B_POSTING05 :NEW.B_POSTING06 :NEW.B_POSTING07
- CASE
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 7 THEN :NEW.B_ENDINGBALANCE06
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 8 THEN :NEW.B_ENDINGBALANCE05
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 9 THEN :NEW.B_ENDINGBALANCE04
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =10 THEN :NEW.B_ENDINGBALANCE03
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =11 THEN :NEW.B_ENDINGBALANCE02
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =12 THEN :NEW.B_ENDINGBALANCE01
ELSE 0
END;
:NEW.B_ENDINGBALANCE08 := :NEW.B_OPENINGBALANCE :NEW.B_POSTING01 :NEW.B_POSTING02 :NEW.B_POSTING03 :NEW.B_POSTING04 :NEW.B_POSTING05 :NEW.B_POSTING06 :NEW.B_POSTING07 :NEW.B_POSTING08
- CASE
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 6 THEN :NEW.B_ENDINGBALANCE07
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 7 THEN :NEW.B_ENDINGBALANCE06
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 8 THEN :NEW.B_ENDINGBALANCE05
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 9 THEN :NEW.B_ENDINGBALANCE04
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =10 THEN :NEW.B_ENDINGBALANCE03
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =11 THEN :NEW.B_ENDINGBALANCE02
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =12 THEN :NEW.B_ENDINGBALANCE01
ELSE 0
END;
:NEW.B_ENDINGBALANCE09 := :NEW.B_OPENINGBALANCE :NEW.B_POSTING01 :NEW.B_POSTING02 :NEW.B_POSTING03 :NEW.B_POSTING04 :NEW.B_POSTING05 :NEW.B_POSTING06 :NEW.B_POSTING07 :NEW.B_POSTING08 :NEW.B_POSTING09
- CASE
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 5 THEN :NEW.B_ENDINGBALANCE08
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 6 THEN :NEW.B_ENDINGBALANCE07
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 7 THEN :NEW.B_ENDINGBALANCE06
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 8 THEN :NEW.B_ENDINGBALANCE05
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 9 THEN :NEW.B_ENDINGBALANCE04
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =10 THEN :NEW.B_ENDINGBALANCE03
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =11 THEN :NEW.B_ENDINGBALANCE02
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =12 THEN :NEW.B_ENDINGBALANCE01
ELSE 0
END;
:NEW.B_ENDINGBALANCE10 := :NEW.B_OPENINGBALANCE :NEW.B_POSTING01 :NEW.B_POSTING02 :NEW.B_POSTING03 :NEW.B_POSTING04 :NEW.B_POSTING05 :NEW.B_POSTING06 :NEW.B_POSTING07 :NEW.B_POSTING08 :NEW.B_POSTING09 :NEW.B_POSTING10
- CASE
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 4 THEN :NEW.B_ENDINGBALANCE09
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 5 THEN :NEW.B_ENDINGBALANCE08
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 6 THEN :NEW.B_ENDINGBALANCE07
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 7 THEN :NEW.B_ENDINGBALANCE06
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 8 THEN :NEW.B_ENDINGBALANCE05
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 9 THEN :NEW.B_ENDINGBALANCE04
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =10 THEN :NEW.B_ENDINGBALANCE03
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =11 THEN :NEW.B_ENDINGBALANCE02
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =12 THEN :NEW.B_ENDINGBALANCE01
ELSE 0
END;
:NEW.B_ENDINGBALANCE11 := :NEW.B_OPENINGBALANCE :NEW.B_POSTING01 :NEW.B_POSTING02 :NEW.B_POSTING03 :NEW.B_POSTING04 :NEW.B_POSTING05 :NEW.B_POSTING06 :NEW.B_POSTING07 :NEW.B_POSTING08 :NEW.B_POSTING09 :NEW.B_POSTING10 :NEW.B_POSTING11
- CASE
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 3 THEN :NEW.B_ENDINGBALANCE10
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 4 THEN :NEW.B_ENDINGBALANCE09
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 5 THEN :NEW.B_ENDINGBALANCE08
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 6 THEN :NEW.B_ENDINGBALANCE07
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 7 THEN :NEW.B_ENDINGBALANCE06
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 8 THEN :NEW.B_ENDINGBALANCE05
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 9 THEN :NEW.B_ENDINGBALANCE04
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =10 THEN :NEW.B_ENDINGBALANCE03
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =11 THEN :NEW.B_ENDINGBALANCE02
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =12 THEN :NEW.B_ENDINGBALANCE01
ELSE 0
END;
:NEW.B_ENDINGBALANCE12 := :NEW.B_OPENINGBALANCE :NEW.B_POSTING01 :NEW.B_POSTING02 :NEW.B_POSTING03 :NEW.B_POSTING04 :NEW.B_POSTING05 :NEW.B_POSTING06 :NEW.B_POSTING07 :NEW.B_POSTING08 :NEW.B_POSTING09 :NEW.B_POSTING10 :NEW.B_POSTING11 :NEW.B_POSTING12
- CASE
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 2 THEN :NEW.B_ENDINGBALANCE11
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 3 THEN :NEW.B_ENDINGBALANCE10
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 4 THEN :NEW.B_ENDINGBALANCE09
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 5 THEN :NEW.B_ENDINGBALANCE08
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 6 THEN :NEW.B_ENDINGBALANCE07
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 7 THEN :NEW.B_ENDINGBALANCE06
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 8 THEN :NEW.B_ENDINGBALANCE05
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 9 THEN :NEW.B_ENDINGBALANCE04
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =10 THEN :NEW.B_ENDINGBALANCE03
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =11 THEN :NEW.B_ENDINGBALANCE02
WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD =12 THEN :NEW.B_ENDINGBALANCE01
ELSE 0
END;
ELSIF (:OLD.B_ENDINGBALANCE01 <> :NEW.B_ENDINGBALANCE01
OR :OLD.B_ENDINGBALANCE02 <> :NEW.B_ENDINGBALANCE02
OR :OLD.B_ENDINGBALANCE03 <> :NEW.B_ENDINGBALANCE03
OR :OLD.B_ENDINGBALANCE04 <> :NEW.B_ENDINGBALANCE04
OR :OLD.B_ENDINGBALANCE05 <> :NEW.B_ENDINGBALANCE05
OR :OLD.B_ENDINGBALANCE06 <> :NEW.B_ENDINGBALANCE06
OR :OLD.B_ENDINGBALANCE07 <> :NEW.B_ENDINGBALANCE07
OR :OLD.B_ENDINGBALANCE08 <> :NEW.B_ENDINGBALANCE08
OR :OLD.B_ENDINGBALANCE09 <> :NEW.B_ENDINGBALANCE09
OR :OLD.B_ENDINGBALANCE10 <> :NEW.B_ENDINGBALANCE10
OR :OLD.B_ENDINGBALANCE11 <> :NEW.B_ENDINGBALANCE11
OR :OLD.B_ENDINGBALANCE12 <> :NEW.B_ENDINGBALANCE12) THEN
:NEW.B_POSTING01 := :NEW.B_ENDINGBALANCE01 - :NEW.B_OPENINGBALANCE;
:NEW.B_POSTING02 := :NEW.B_ENDINGBALANCE02 - CASE WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 12 THEN 0 ELSE :NEW.B_ENDINGBALANCE01 END;
:NEW.B_POSTING03 := :NEW.B_ENDINGBALANCE03 - CASE WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 11 THEN 0 ELSE :NEW.B_ENDINGBALANCE02 END;
:NEW.B_POSTING04 := :NEW.B_ENDINGBALANCE04 - CASE WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 10 THEN 0 ELSE :NEW.B_ENDINGBALANCE03 END;
:NEW.B_POSTING05 := :NEW.B_ENDINGBALANCE05 - CASE WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 9 THEN 0 ELSE :NEW.B_ENDINGBALANCE04 END;
:NEW.B_POSTING06 := :NEW.B_ENDINGBALANCE06 - CASE WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 8 THEN 0 ELSE :NEW.B_ENDINGBALANCE05 END;
:NEW.B_POSTING07 := :NEW.B_ENDINGBALANCE07 - CASE WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 7 THEN 0 ELSE :NEW.B_ENDINGBALANCE06 END;
:NEW.B_POSTING08 := :NEW.B_ENDINGBALANCE08 - CASE WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 6 THEN 0 ELSE :NEW.B_ENDINGBALANCE07 END;
:NEW.B_POSTING09 := :NEW.B_ENDINGBALANCE09 - CASE WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 5 THEN 0 ELSE :NEW.B_ENDINGBALANCE08 END;
:NEW.B_POSTING10 := :NEW.B_ENDINGBALANCE10 - CASE WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 4 THEN 0 ELSE :NEW.B_ENDINGBALANCE09 END;
:NEW.B_POSTING11 := :NEW.B_ENDINGBALANCE11 - CASE WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 3 THEN 0 ELSE :NEW.B_ENDINGBALANCE10 END;
:NEW.B_POSTING12 := :NEW.B_ENDINGBALANCE12 - CASE WHEN v_CLOSE_TO_ACCOUNT <> 0 AND :NEW.START_PERIOD = 2 THEN 0 ELSE :NEW.B_ENDINGBALANCE11 END;
END IF;
END;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/314324.html
上一篇:Oraclesql-SP2-0552:系結變數“T_END”未宣告錯誤,但“T_START”很好,為什么?兩者都使用TO_DATE()
