You are on page 1of 5

/* Formatted on 2020/07/24 07:53 (Formatter Plus v4.8.

8) */
CREATE OR REPLACE PROCEDURE prc_virmnt_rokka_log_req (p_dml_oper IN VARCHAR2)
IS
TYPE frm_virmntrec IS RECORD ( --RECORD TYPE DECLARE
vsno NUMBER,
from_ministry_code VARCHAR2 (100),
from_project_code VARCHAR2 (100),
from_sub_project_code VARCHAR2 (100),
from_economic_code5 VARCHAR2 (100),
deducted_amount NUMBER (10, 2)
);

TYPE frm_rectyp IS VARRAY (20) OF frm_virmntrec;

v_frm_rectyp frm_rectyp := frm_rectyp ();

TYPE to_virmntrec IS RECORD ( --RECORD TYPE DECLARE


vsno NUMBER,
to_ministry_code VARCHAR2 (100),
to_project_code VARCHAR2 (100),
to_sub_project_code VARCHAR2 (100),
to_economic_code5 VARCHAR2 (100),
added_amount NUMBER (10, 2)
);

TYPE to_rectyp IS VARRAY (20) OF to_virmntrec;

v_to_rectyp to_rectyp := to_rectyp ();


p_success VARCHAR2 (1) := 'Y';
p_msg VARCHAR2 (500);
v_dml_oper VARCHAR2 (6);
v_dedamt NUMBER (10, 2);
v_addamt NUMBER (10, 2);
v_balance NUMBER (10, 2);
v_baladd NUMBER (10, 2);
BEGIN
v_dml_oper := UPPER (TRIM (p_dml_oper));

SELECT serial_no,
from_ministry_code,
from_project_code,
from_sub_project_code,
from_economic_code5,
deducted_amount
BULK COLLECT INTO v_frm_rectyp
FROM lmbs_frm_tmp_virmnt_roka_act
ORDER BY serial_no ASC;

SELECT b.serial_no,
b.to_ministry_code,
b.to_project_code,
b.to_sub_project_code,
b.to_economic_code5,
b.added_amount
BULK COLLECT INTO v_to_rectyp
FROM lmbs_to_tmp_virmnt_roka_act b
ORDER BY serial_no ASC;

IF v_dml_oper = 'INS'
THEN
FOR i IN v_frm_rectyp.FIRST .. v_frm_rectyp.LAST
LOOP
IF ( (v_frm_rectyp (i).deducted_amount + NVL (v_balance, 0))
- NVL (v_baladd, 0)
) = v_to_rectyp (i).added_amount
THEN
INSERT INTO lmbis_virement_rokka_act_log
(from_ministry_code,
deducted_amount,
to_ministry_code,
added_amount,
from_project_code,
from_sub_project_code,
from_economic_code5,
to_project_code,
to_sub_project_code,
to_economic_code5
)
VALUES (v_frm_rectyp (i).from_ministry_code,
v_frm_rectyp (i).deducted_amount
+ NVL (v_balance, 0)
- NVL (v_baladd, 0),
v_to_rectyp (i).to_ministry_code,
v_to_rectyp (i).added_amount,
v_frm_rectyp (i).from_project_code,
v_frm_rectyp (i).from_sub_project_code,
v_frm_rectyp (i).from_economic_code5,
v_to_rectyp (i).to_project_code,
v_to_rectyp (i).to_sub_project_code,
v_to_rectyp (i).to_economic_code5
);

v_balance := 0;
v_baladd := 0;
ELSIF ( (v_frm_rectyp (i).deducted_amount + NVL (v_balance, 0))
- NVL (v_baladd, 0)
) > v_to_rectyp (i).added_amount
THEN
INSERT INTO lmbis_virement_rokka_act_log
(from_ministry_code,
deducted_amount,
to_ministry_code,
added_amount,
from_project_code,
from_sub_project_code,
from_economic_code5,
to_project_code,
to_sub_project_code,
to_economic_code5
)
VALUES (v_frm_rectyp (i).from_ministry_code,
v_frm_rectyp (i).deducted_amount,
v_to_rectyp (i).to_ministry_code,
v_to_rectyp (i).added_amount,
v_frm_rectyp (i).from_project_code,
v_frm_rectyp (i).from_sub_project_code,
v_frm_rectyp (i).from_economic_code5,
v_to_rectyp (i).to_project_code,
v_to_rectyp (i).to_sub_project_code,
v_to_rectyp (i).to_economic_code5
);

v_balance :=
v_frm_rectyp (i).deducted_amount - v_to_rectyp (i).added_amount;
v_baladd := 0;

IF v_balance > 0
THEN
INSERT INTO lmbis_virement_rokka_act_log
(from_ministry_code, deducted_amount,
to_ministry_code,
added_amount,
from_project_code,
from_sub_project_code,
from_economic_code5,
to_project_code,
to_sub_project_code,
to_economic_code5
)
VALUES (v_frm_rectyp (i).from_ministry_code, v_balance,
v_to_rectyp (i + 1).to_ministry_code,
v_to_rectyp (i + 1).added_amount,
v_frm_rectyp (i).from_project_code,
v_frm_rectyp (i).from_sub_project_code,
v_frm_rectyp (i).from_economic_code5,
v_to_rectyp (i + 1).to_project_code,
v_to_rectyp (i + 1).to_sub_project_code,
v_to_rectyp (i + 1).to_economic_code5
);
-- v_balance:=v_balance - v_to_rectyp (i+1).added_amount;
END IF;
ELSIF ( (v_frm_rectyp (i).deducted_amount + NVL (v_balance, 0))
- NVL (v_baladd, 0)
) < v_to_rectyp (i).added_amount
THEN
INSERT INTO lmbis_virement_rokka_act_log
(from_ministry_code,
deducted_amount,
to_ministry_code,
added_amount,
from_project_code,
from_sub_project_code,
from_economic_code5,
to_project_code,
to_sub_project_code,
to_economic_code5
)
VALUES (v_frm_rectyp (i).from_ministry_code,
v_frm_rectyp (i).deducted_amount
+ NVL (v_balance, 0)
- NVL (v_baladd, 0),
v_to_rectyp (i).to_ministry_code,
v_to_rectyp (i).added_amount,
v_frm_rectyp (i).from_project_code,
v_frm_rectyp (i).from_sub_project_code,
v_frm_rectyp (i).from_economic_code5,
v_to_rectyp (i).to_project_code,
v_to_rectyp (i).to_sub_project_code,
v_to_rectyp (i).to_economic_code5
);

v_baladd :=
v_to_rectyp (i).added_amount
- ( v_frm_rectyp (i).deducted_amount
+ NVL (v_balance, 0)
- NVL (v_baladd, 0)
);
v_balance := 0;

IF v_baladd != 0
THEN
INSERT INTO lmbis_virement_rokka_act_log
(from_ministry_code, deducted_amount,
to_ministry_code,
added_amount,
from_project_code,
from_sub_project_code,
from_economic_code5,
to_project_code,
to_sub_project_code,
to_economic_code5
)
VALUES (v_frm_rectyp (i).from_ministry_code, v_baladd,
v_to_rectyp (i).to_ministry_code,
v_to_rectyp (i).added_amount,
v_frm_rectyp (i).from_project_code,
v_frm_rectyp (i).from_sub_project_code,
v_frm_rectyp (i).from_economic_code5,
v_to_rectyp (i).to_project_code,
v_to_rectyp (i).to_sub_project_code,
v_to_rectyp (i).to_economic_code5
);
--v_balance:=v_balance - v_to_rectyp (i+1).added_amount;
END IF;
END IF;

COMMIT;
END LOOP;
-- OPEN c1;

-- LOOP
-- FETCH c1
-- INTO v1;

-- EXIT WHEN c1%NOTFOUND;

-- OPEN c2;

-- LOOP
-- FETCH c2
-- INTO v2;

-- EXIT WHEN c2%NOTFOUND;

-- INSERT INTO lmbis_virement_rokka_act_log


-- (bud_year
-- )
-- VALUES ('A'
-- );
-- END LOOP;

-- CLOSE c2;
-- END LOOP;

-- CLOSE c1;
END IF;
EXCEPTION
WHEN OTHERS
THEN
p_success := 'N';
p_msg :=
'PKG_VIRMNT_ROKKA_ACT_DML.PRC_VIRMNT_ROKKA_ACT_LOG_DML(INS) '
|| SUBSTR (SQLERRM, 1, 200);
END;
/

You might also like