/* 下面代码中,使用了四种不同的代码风格和报表的实现方式,灵活运用即可 足够满足 一般乃至复杂的业务需求,还有一些工具函数和存储,可以参考使用,请耐心读代码,必有收获。 各有优缺点,可以组合各种风格一起使用,请自行参考 四种方式(ctrl+f搜索“四种方式”): 1、采用游标循环,循环内全部采用:select t.xx into xx from tt t where ...的代码风格 2、采用两条语句,一条insert tt select xx from ttt插入所需要的行, 然后一条update xx=(select yy from tt) where ... 3、采用子查询因子化,主要是使用with语句,可以实现不是很复杂的报表 4、采用model子句,实现强大的报表查询的功能(excel能实现的,这个东东一样能行,我这里面的自己可能很简单),结合with语句可以实现非常强大的报表。 */ CREATE OR REPLACE PACKAGE BODY HIGTEST."HIG_REPORT_BORROW" AS --FN_DKLL 用 p_const_dkdh VARCHAR2 (60) := NULL; --FN_DKLL 用 TYPE dkll_rec_typ IS RECORD ( dkll NUMBER, num NUMBER ); --FN_DKLL 用 TYPE dkll_tab_typ IS TABLE OF dkll_rec_typ INDEX BY PLS_INTEGER; --FN_DKLL 用 dkll_tab dkll_tab_typ; /* FN_DKLL测试方法(直接运行即可): SELECT HIG_REPORT_BORROW.FN_DKLL('DK00000137',TO_DATE('2013-04-09','YYYY-MM-DD'),1) AS ONE , HIG_REPORT_BORROW.FN_DKLL('DK00000137',TO_DATE('2013-04-09','YYYY-MM-DD'),2) AS TWO , HIG_REPORT_BORROW.FN_DKLL('DK00000137',TO_DATE('2013-04-09','YYYY-MM-DD'),3) AS THREE, HIG_REPORT_BORROW.FN_DKLL('DK00000145',TO_DATE('2013-04-09','YYYY-MM-DD'),1) AS ONE , HIG_REPORT_BORROW.FN_DKLL('DK00000145',TO_DATE('2013-04-09','YYYY-MM-DD'),2) AS TWO , HIG_REPORT_BORROW.FN_DKLL('DK00000145',TO_DATE('2013-04-09','YYYY-MM-DD'),3) AS THREE FROM DUAL; SELECT T.IYFRATE FROM T_HIG_BORROW_DK T WHERE T.CDOCUMENT ='DK00000138'; 取n次利率变化 用法: FN_DKLL('DK00000145',TO_DATE('2013-03-29','YYYY-MM-DD'),1) AS DKLL1, 每个不同的贷款单都要要调用此方法三次,所以这个函数要尽可能做优化。 说明: 此方法较下面的方法2,要更加优化,执行效率高,在理论上,细微区别请看代码并且结合实际运行情景。 */ FUNCTION fn_dkll (v_dkdh VARCHAR2, --贷款单号 v_date DATE, --截止日期 v_num NUMBER) --第几次利率变化 RETURN NUMBER AS p_num_his NUMBER; BEGIN --如果单号相同,下面的方法可以仅仅执行一次而节约资源,否则执行计算并且缓存数据 IF (p_const_dkdh IS NULL OR p_const_dkdh != v_dkdh) THEN p_const_dkdh := v_dkdh; --###CREATE INDEX HIGTEST.IDX$$_3E540001 ON HIGTEST.T_HIG_BORROW_JX(' -- CDKDOCUMENT','CSTATUS','DJXENDDATE'); SELECT * BULK COLLECT INTO dkll_tab FROM (SELECT w.dkll AS dkll, --贷款利率 -- W.DJXENDDATE, ROWNUM AS num --编号 FROM ( SELECT ROUND (t.iyfrate, 2) AS dkll, --贷款利率 -- T.DJXENDDATE, CASE WHEN (LAG (t.iyfrate, 1, 0) OVER (ORDER BY t.djxenddate) <> t.iyfrate -- -- OR ROWNUM =1--第一行也算上 ) -- AND T.IYFRATE <> -- ( -- -- SELECT -- -- ROUND(T.IYFRATE,2) -- FROM -- -- T_HIG_BORROW_DK T -- WHERE -- -- T.CDOCUMENT =V_DKDH -- ) -- -- 排除与初始利率值相同的利率变化 THEN 1 ELSE 2 END AS shuliang FROM t_hig_borrow_jx t WHERE t.cstatus = 'Y' AND t.cdkdocument = v_dkdh AND t.djxenddate <= v_date --截止日期(贷款开始日期) ORDER BY t.djxenddate --计息起始日期 正序 ) w WHERE w.shuliang = 1); END IF; IF v_num = 1 THEN -- 如果有与默认利率相同的,则这些变化为相同的利率给初始化为null SELECT ROUND (t.iyfrate, 2) INTO p_num_his FROM t_hig_borrow_dk t WHERE t.cdocument = v_dkdh; IF dkll_tab (v_num).dkll = p_num_his THEN dkll_tab (v_num).dkll := dkll_tab (v_num + 1).dkll; dkll_tab (v_num + 1).dkll := dkll_tab (v_num + 2).dkll; dkll_tab (v_num + 2).dkll := NULL; END IF; END IF; RETURN dkll_tab (v_num).dkll; --直接返回缓存中的数据。 EXCEPTION WHEN OTHERS THEN RETURN NULL; END fn_dkll; /* 取n次利率变化 用法: FN_DKLL('DK00000145',TO_DATE('2013-03-29','YYYY-MM-DD'),1) AS DKLL1, 每个不同的贷款单都要要调用此方法三次,这个函数是未优化过的,当大数据量时,请谨慎使用。 说明: 此方法没有废弃,此方法已经测试通过,可以使用 */ FUNCTION fn_dkll2 (v_dkdh VARCHAR2, --贷款单号 v_date DATE, --截止日期 v_num NUMBER) --第几次利率变化 RETURN NUMBER AS p_num NUMBER (18, 4) := NULL; p_num_his NUMBER; BEGIN SELECT dkll INTO p_num FROM (SELECT w.dkll AS dkll, --贷款利率 -- W.DJXENDDATE, ROWNUM AS num --编号 FROM ( SELECT t.iyfrate AS dkll, --贷款利率 -- T.DJXENDDATE, CASE WHEN (LAG (t.iyfrate, 1, 0) OVER (ORDER BY t.djxenddate) <> t.iyfrate -- OR ROWNUM -- =1--第一行也算上 ) --AND T.IYFRATE <> -- ( -- SELECT -- T.IYFRATE -- FROM -- T_HIG_BORROW_DK T -- WHERE -- T.CDOCUMENT =V_DKDH -- ) --排除与初始利率值相同的利率变化 THEN 1 ELSE 2 END AS shuliang FROM t_hig_borrow_jx t WHERE t.cstatus = y AND t.cdkdocument = v_dkdh AND t.djxenddate <= v_date --截止日期(贷款开始日期) ORDER BY t.djxenddate --计息起始日期 正序 ) w WHERE w.shuliang = 1) WHERE num = v_num; --值为1表示变化了,null表示没有发生变化 IF v_num = 1 THEN -- 如果有与默认利率相同的,则这些变化为相同的利率给初始化为null SELECT ROUND (t.iyfrate, 2) INTO p_num_his FROM t_hig_borrow_dk t WHERE t.cdocument = v_dkdh; IF p_num = p_num_his THEN RETURN NULL; END IF; END IF; RETURN p_num; EXCEPTION WHEN OTHERS THEN RETURN NULL; END fn_dkll2; FUNCTION fn_mark_dyh (text VARCHAR2) RETURN VARCHAR2 IS /* 单引号定义 */ mark_dyh CHAR := CHR (39); /****************************************************************************** warp ' ******************************************************************************/ BEGIN RETURN mark_dyh || text || mark_dyh; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN -- Consider logging the error and then re-raise RAISE; END fn_mark_dyh; /* 格式化数字为指定格式的字符串,多用于页面展示数字用 测试语句: SELECT hig_report_borrow.fn_fmt_number (237834.856) a, hig_report_borrow.fn_fmt_number (237834.856, 0) aa, hig_report_borrow.fn_fmt_number (0.0) b, hig_report_borrow.fn_fmt_number (0.0, 4) bb, hig_report_borrow.fn_fmt_number (-0.0) c, hig_report_borrow.fn_fmt_number (-0.0, 8) cc, hig_report_borrow.fn_fmt_number (0.1236, 3) d, hig_report_borrow.fn_fmt_number (-0.1236, 3) e, hig_report_borrow.fn_fmt_number (-237289.356, 2, 10000) f, hig_report_borrow.fn_fmt_number (237289.356, 2, 10000) g, hig_report_borrow.fn_fmt_number (2, 4, 10000) h, hig_report_borrow.fn_fmt_number (-2, 4, 10000) hh FROM DUAL; */ FUNCTION fn_fmt_number (v_num NUMBER, --需要要格式化的数字 v_pot NUMBER DEFAULT 2, --小数位数,现最大支持6位小数,默认精度为2位小数. v_unit NUMBER DEFAULT 1) --单位,默认单位为原始V_NUM数据的单位,即保持不变. RETURN VARCHAR2 AS p_num VARCHAR2 (100); p_unit NUMBER; p_temp NUMBER := 6; BEGIN p_unit := v_unit; IF v_unit IS NULL OR v_unit <= 0 THEN --兼容之前的数字格式化函数(因为现代码里有的传入的参数是0) p_unit := 1; END IF; --标准千分位显示 p_num := TO_CHAR (ROUND (NVL (v_num, 0) / p_unit, v_pot), 'FM9,999,999,999,999,999,990.000000'); /* 请将下面的 if和return语句替换wie此语句,并将上面的fmt字符替换为:FM9,999,999,999,999,999,990.099999, 测试,查看效果,RETURN p_num;*/ IF v_pot <= 0 THEN p_temp := p_temp + 1; END IF; RETURN SUBSTR (NVL (p_num, '0'), 1, LENGTH (p_num) - (p_temp - v_pot)); EXCEPTION WHEN OTHERS THEN RETURN '0'; END fn_fmt_number; /* 格式化数字为百分比。 测试语句: SELECT hig_report_borrow.fn_fmt_percent (237834.856) a, hig_report_borrow.fn_fmt_percent (237834.856, 0) aa, hig_report_borrow.fn_fmt_percent (0.0) b, hig_report_borrow.fn_fmt_percent (0.0, 4) bb, hig_report_borrow.fn_fmt_percent (-0.0) c, hig_report_borrow.fn_fmt_percent (-0.0, 8) cc, hig_report_borrow.fn_fmt_percent (236, 3) d, hig_report_borrow.fn_fmt_percent (-0.1236, 3) e, hig_report_borrow.fn_fmt_percent (-237289.356, 2) f, hig_report_borrow.fn_fmt_percent (237289.356, 2) g, hig_report_borrow.fn_fmt_percent (2, 4) h, hig_report_borrow.fn_fmt_percent (-2, 4) hh FROM DUAL; */ FUNCTION fn_fmt_percent (v_num IN NUMBER, v_pot IN NUMBER DEFAULT 2) RETURN VARCHAR2 AS p_num VARCHAR2 (100); p_pot NUMBER; p_temp NUMBER := 6; BEGIN p_num := TO_CHAR (ROUND (NVL (v_num, 0) / 100, v_pot), 'FM9,999,999,999,999,999,990.000000'); /* 请将下面的 if和return语句替换wie此语句,并将上面的fmt字符替换为:FM9,999,999,999,999,999,990.099999, 测试,查看效果,RETURN p_num || '%';*/ IF v_pot <= 0 THEN p_temp := p_temp + 1; END IF; RETURN SUBSTR (NVL (p_num, '0'), 1, LENGTH (p_num) - (p_temp - v_pot)) || '%'; EXCEPTION WHEN OTHERS THEN RETURN '0.00%'; END fn_fmt_percent; /* 截止到当前日 累计 FN_DATE_JZDDQR 截止到当前日 JD FN_DATE_BENNIAN 本年 Y FN_DATE_BENYUE 本月 M FN_DATE_JZDDQY 截止到当前月 JM 目的:方便日后统一修改,省的像我一样这么累啊 */ FUNCTION fn_date (flag VARCHAR, --标志如jd,y,m,jm d1 DATE, --数据库表中的日期字段 d2 DATE) --您填写的 要比较的日期 RETURN NUMBER AS p_bool BOOLEAN := FALSE; p_d1 DATE; p_d2 DATE; p_flag VARCHAR (2); BEGIN -- 因为数据库中的日期的存储千奇百怪,所以这里要进行格式化处理 p_d1 := TO_DATE (TO_CHAR (d1, 'YYYY-MM-DD'), 'YYYY-MM-DD'); p_d2 := TO_DATE (TO_CHAR (d2, 'YYYY-MM-DD'), 'YYYY-MM-DD'); p_flag := UPPER (flag); IF 'JD' = p_flag THEN --截止到当前日,包括当前日 p_bool := p_d1 <= p_d2; ELSIF 'Y' = p_flag THEN --本年初 到 截止日期 p_bool := EXTRACT (YEAR FROM p_d1) = EXTRACT (YEAR FROM p_d2) AND p_d1 <= p_d2; ELSIF 'M' = p_flag THEN --本年本月 到 截止日期 p_bool := EXTRACT (YEAR FROM p_d1) = EXTRACT (YEAR FROM p_d2) AND EXTRACT (MONTH FROM p_d1) = EXTRACT (MONTH FROM p_d2) AND p_d1 <= p_d2; ELSIF 'BY' = p_flag THEN --本年 预算相关的本年就是本年 p_bool := EXTRACT (YEAR FROM p_d1) = EXTRACT (YEAR FROM p_d2); ELSIF 'BM' = p_flag THEN --本年 预算相关的本月就是本月 p_bool := EXTRACT (YEAR FROM p_d1) = EXTRACT (YEAR FROM p_d2) AND EXTRACT (MONTH FROM p_d1) = EXTRACT (MONTH FROM p_d2); ELSIF 'JM' = p_flag THEN --截止到本月,包括当前月 p_bool := p_d1 <= p_d2; --修改日期 -- P_BOOL := P_D1<FN_DATE_JZDDQY(P_D2); ELSE DBMS_OUTPUT.put_line ('没有找到 要处理的日期 逻辑,ERROR!!!'); END IF; IF p_bool THEN RETURN 1; ELSE RETURN 0; END IF; EXCEPTION WHEN OTHERS THEN RETURN 0; END fn_date; /* 截止到当前月 之累计 目的:方便日后统一修改,省的像我一样这么累啊 用法:SELECT FN_JIEZHI_YUE(TO_DATE('2013-11-30','YYYY-MM-DD')) from dual; */ FUNCTION fn_date_jzddqy (d DATE) RETURN DATE /* 截止到当前月,包括当前月 使用方法,dk.xxxdate < FN_JIEZHI_YUE(date); date是查询条件 尹斌 */ AS y NUMBER (4); m NUMBER (4); dd DATE; BEGIN y := EXTRACT (YEAR FROM d); m := EXTRACT (MONTH FROM d) + 1; IF m > 12 THEN y := y + 1; m := 1; END IF; -- SYS.DBMS_OUTPUT.PUT_LINE(Y||'-'||M); dd := TO_DATE (y || '-' || m, 'YYYY-MM'); RETURN dd; EXCEPTION WHEN OTHERS THEN RAISE; END fn_date_jzddqy; /* 存储commit后,记录成功日志 此方法不会自动给你commit; */ PROCEDURE log_success (cuser IN VARCHAR2, csource IN VARCHAR2, caction IN VARCHAR2, cdescription IN VARCHAR2) AS BEGIN INSERT INTO t_int_log (cuser, csource, caction, cdescription) VALUES (cuser, csource, caction, cdescription); EXCEPTION WHEN OTHERS THEN NULL; END log_success; /* 存储发生exception后,记录异常日志。 此方法不会自动给你rollback; */ PROCEDURE log_error (cuser IN VARCHAR2, csource IN VARCHAR2, csqlcode IN VARCHAR2, csqlerrm IN VARCHAR2) AS v_errorcode VARCHAR2 (100); -- v_errorcode t_int_log.caction%TYPE; --异常日志表 异常编码字段的类型 v_errordesc VARCHAR2 (2000); -- v_errordesc t_int_log.cdescription%TYPE; --异常日志表 异常说明字段的类型 BEGIN v_errorcode := SUBSTR (csqlcode, 1, 50); v_errordesc := SUBSTR (csqlerrm, 1, 1500); INSERT INTO t_int_log (cuser, csource, caction, cdescription) VALUES (cuser, csource, v_errorcode || '#', v_errordesc); --打印错误日志到控制台 DBMS_OUTPUT.put_line (cuser || csource || v_errorcode || '#' || v_errordesc); END log_error; /* 统计工具函数 强烈依赖于T_HIG_SZPROJECT表和表中的数据,请务必注意。 使用方式,请搜索此方法名,在这个文档中。 */ PROCEDURE util_hejiproject (sql_txt IN VARCHAR2, --模板sql v_date DATE, --sql引擎在解析sql模板时会用此值”替换“sql模板中时间有关的占位符 v_parent_code IN VARCHAR2 DEFAULT 'PARENT' --原理同上 ) AS --字符串操作优化 sqlt CONSTANT VARCHAR2 (3000) := REPLACE (sql_txt, 'HEJI_CHILLDRENS', 'SELECT T.CYHCODE FROM T_HIG_SZPROJECT T WHERE T.PARENT_CODE =:1') ; num NUMBER; --存储计算某个项目下的子项目的子项目数量 temp VARCHAR2 (100); --存储临时的 parent_code --游标:根据父级项目查询子项目编码 CURSOR cur_his (cv_parent_code VARCHAR2) IS --###CREATE INDEX HIGTEST.IDX$$_3E5A0001 ON HIGTEST.T_HIG_SZPROJECT(' -- PARENT_CODE'); SELECT t.cyhcode FROM t_hig_szproject t WHERE t.parent_code = cv_parent_code; BEGIN SELECT COUNT (*) INTO num FROM t_hig_szproject t WHERE t.parent_code IN (SELECT i.cyhcode FROM t_hig_szproject i WHERE i.parent_code = v_parent_code); IF num > 0 THEN OPEN cur_his (v_parent_code); LOOP FETCH cur_his INTO temp; EXIT WHEN cur_his%NOTFOUND; util_hejiproject (sql_txt, v_date, temp); --递归迭代 END LOOP; CLOSE cur_his; END IF; -- -- -- 递归内层项目一旦执行完毕,立即执行外层统计,由内到外逐层执行统计sql(业务上是由子项目到父项目再到祖父项目......),从而保证所有统计都是正确的。 EXECUTE IMMEDIATE sqlt USING v_parent_code, v_date, v_parent_code, v_date; COMMIT; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line ('DIGUI ERROR!' || SQLCODE || ':' || SQLERRM); ROLLBACK; RAISE; END; --- /* ******************************************************************************* ******************************************************* ******************************************************************************* *****************************************1、融资明细台账 ******************************************************************************* ******************************************************* */ -- ----------------------------------------------------------------------------- -- 1、全项目融资台账 PROCEDURE rztz_all (vv_date IN DATE) --截止日期 AS v_date DATE := TO_DATE (TO_CHAR (vv_date, 'YYYY-MM-DD'), 'YYYY-MM-DD'); BEGIN --清理数据先 DELETE FROM t_hig_borrow_qxmzjdktz_his t WHERE t.cdate = v_date; --执行存储 p_hig_borrow_qxmzjdktz (v_date); --合计 util_hejiproject ('UPDATE T_HIG_BORROW_QXMZJDKTZ_HIS T SET ( DKYS, NCYE, BNYSJK, BNYSHK, BNSJJK, BNSJHK, BNCJK, BNCHK, BYYSJK, BYYSHK, BYSJJK, BYSJHK, BYCJK, BYCHK, QMYE, GDNCYE, GDBNYSJK, GDBNYSHK, GDBNSJJK, GDBNSJHK, GDBNCJK, GDBNCHK, GDBYYSJK, GDBYYSHK, GDBYSJJK, GDBYSJHK, GDBYCJK, GDBYCHK, GDQMYE, KFNCYE, KFBNYSJK, KFBNYSHK, KFBNSJJK, KFBNSJHK, KFBNCJK, KFBNCHK, KFBYYSJK, KFBYYSHK, KFBYSJJK, KFBYSJHK, KFBYCJK, KFBYCHK, KFQMYE, NBNCYE, NBBNLJJK, NBBNJHK, NBBYSJJK, NBBYSJHK, NBQMYE, ZCZJ ) = ( SELECT SUM(DKYS), -- SUM(NCYE), -- SUM(BNYSJK), -- SUM(BNYSHK), -- SUM(BNSJJK), -- SUM(BNSJHK), -- SUM(BNCJK), -- SUM(BNCHK), -- SUM(BYYSJK), -- SUM(BYYSHK), -- SUM(BYSJJK), -- SUM(BYSJHK), -- SUM(BYCJK), -- SUM(BYCHK), -- SUM(QMYE), -- SUM(GDNCYE), -- SUM(GDBNYSJK),-- SUM(GDBNYSHK),-- SUM(GDBNSJJK),-- SUM(GDBNSJHK),-- SUM(GDBNCJK), -- SUM(GDBNCHK), -- SUM(GDBYYSJK),-- SUM(GDBYYSHK),-- SUM(GDBYSJJK),-- SUM(GDBYSJHK),-- SUM(GDBYCJK), -- SUM(GDBYCHK), -- SUM(GDQMYE), -- SUM(KFNCYE), -- SUM(KFBNYSJK),-- SUM(KFBNYSHK),-- SUM(KFBNSJJK),-- SUM(KFBNSJHK),-- SUM(KFBNCJK), -- SUM(KFBNCHK), -- SUM(KFBYYSJK),-- SUM(KFBYYSHK),-- SUM(KFBYSJJK),-- SUM(KFBYSJHK),-- SUM(KFBYCJK), -- SUM(KFBYCHK), -- SUM(KFQMYE), -- SUM(NBNCYE), -- SUM(NBBNLJJK),-- SUM(NBBNJHK), -- SUM(NBBYSJJK),-- SUM(NBBYSJHK),-- SUM(NBQMYE), -- SUM(ZCZJ) -- FROM T_HIG_BORROW_QXMZJDKTZ_HIS S WHERE S.CPROJECTCODE IN(HEJI_CHILLDRENS) AND S.CDATE = :2 ) WHERE T.CPROJECTCODE = :3 AND T.CDATE = :4 AND T.CSTATUS = ' || fn_mark_dyh ('N'), v_date); --格式化 DELETE FROM t_hig_borrow_qxmzjdktz t WHERE t.cdate = v_date; INSERT INTO t_hig_borrow_qxmzjdktz t (t.cprojectcode, t.jytz, t.dkys, t.ncye, t.bnysjk, t.bnyshk, t.bnsjjk, t.bnsjhk, t.bncjk, t.bnchk, t.byysjk, t.byyshk, t.bysjjk, t.bysjhk, t.bycjk, t.bychk, t.qmye, t.gdncye, t.gdbnysjk, t.gdbnyshk, t.gdbnsjjk, t.gdbnsjhk, t.gdbncjk, t.gdbnchk, t.gdbyysjk, t.gdbyyshk, t.gdbysjjk, t.gdbysjhk, t.gdbycjk, t.gdbychk, t.gdqmye, t.kfncye, t.kfbnysjk, t.kfbnyshk, t.kfbnsjjk, t.kfbnsjhk, t.kfbncjk, t.kfbnchk, t.kfbyysjk, t.kfbyyshk, t.kfbysjjk, t.kfbysjhk, t.kfbycjk, t.kfbychk, t.kfqmye, t.nbncye, t.nbbnljjk, t.nbbnjhk, t.nbbysjjk, t.nbbysjhk, t.nbqmye, t.zczj, t.cdate, t.cprojectname, t.cprojectnamefmt, t.iorder, t.cstatus) SELECT cprojectcode, jytz, fn_fmt_number (dkys, 0, 10000), fn_fmt_number (ncye, 0, 10000), fn_fmt_number (bnysjk, 0, 10000), fn_fmt_number (bnyshk, 0, 10000), fn_fmt_number (bnsjjk, 0, 10000), fn_fmt_number (bnsjhk, 0, 10000), fn_fmt_number (bncjk, 0, 10000), fn_fmt_number (bnchk, 0, 10000), fn_fmt_number (byysjk, 0, 10000), fn_fmt_number (byyshk, 0, 10000), fn_fmt_number (bysjjk, 0, 10000), fn_fmt_number (bysjhk, 0, 10000), fn_fmt_number (bycjk, 0, 10000), fn_fmt_number (bychk, 0, 10000), fn_fmt_number (qmye, 0, 10000), fn_fmt_number (gdncye, 0, 10000), fn_fmt_number (gdbnysjk, 0, 10000), fn_fmt_number (gdbnyshk, 0, 10000), fn_fmt_number (gdbnsjjk, 0, 10000), fn_fmt_number (gdbnsjhk, 0, 10000), fn_fmt_number (gdbncjk, 0, 10000), fn_fmt_number (gdbnchk, 0, 10000), fn_fmt_number (gdbyysjk, 0, 10000), fn_fmt_number (gdbyyshk, 0, 10000), fn_fmt_number (gdbysjjk, 0, 10000), fn_fmt_number (gdbysjhk, 0, 10000), fn_fmt_number (gdbycjk, 0, 10000), fn_fmt_number (gdbychk, 0, 10000), fn_fmt_number (gdqmye, 0, 10000), fn_fmt_number (kfncye, 0, 10000), fn_fmt_number (kfbnysjk, 0, 10000), fn_fmt_number (kfbnyshk, 0, 10000), fn_fmt_number (kfbnsjjk, 0, 10000), fn_fmt_number (kfbnsjhk, 0, 10000), fn_fmt_number (kfbncjk, 0, 10000), fn_fmt_number (kfbnchk, 0, 10000), fn_fmt_number (kfbyysjk, 0, 10000), fn_fmt_number (kfbyyshk, 0, 10000), fn_fmt_number (kfbysjjk, 0, 10000), fn_fmt_number (kfbysjhk, 0, 10000), fn_fmt_number (kfbycjk, 0, 10000), fn_fmt_number (kfbychk, 0, 10000), fn_fmt_number (kfqmye, 0, 10000), fn_fmt_number (nbncye, 0, 10000), fn_fmt_number (nbbnljjk, 0, 10000), fn_fmt_number (nbbnjhk, 0, 10000), fn_fmt_number (nbbysjjk, 0, 10000), fn_fmt_number (nbbysjhk, 0, 10000), fn_fmt_number (nbqmye, 0, 10000), fn_fmt_number (zczj, 0, 10000), cdate, cprojectname, cprojectnamefmt, iorder, cstatus FROM t_hig_borrow_qxmzjdktz_his WHERE cdate = v_date; COMMIT; log_success ('calcjobs', 'HIGTBS-P_HIG_BORROW_QXMZJDKTZ', 'HIG全项目资金贷款台账_汇总—项目 | ', '计算-成功'); EXCEPTION WHEN OTHERS THEN ROLLBACK; log_error ('calcjobs', 'HIGTBS-P_HIG_BORROW_QXMZJDKTZ', SQLCODE, SQLERRM); END rztz_all; -- ----------------------------------------------------------------------------- -- 2、单项目融资台账-到分期 PROCEDURE rztz_fq (vv_date IN DATE, --截止日期 v_cprojectcode IN VARCHAR2 DEFAULT NULL, --项目编码 v_cprojectname IN VARCHAR2 DEFAULT NULL) --项目名称 AS v_date DATE := TO_DATE (TO_CHAR (vv_date, 'YYYY-MM-DD'), 'YYYY-MM-DD'); BEGIN --清理数据先 DELETE FROM t_hig_borrow_dxmzjdktz_fq_his t WHERE t.cdate = v_date; IF v_cprojectcode IS NULL AND v_cprojectname IS NULL THEN --循环计算每个项目 TODO FOR j IN (SELECT t.cyhcode, t.cyhname FROM t_hig_szproject t WHERE t.cstatus = y --仅仅查询合计 项目,非项目不进行计算 ) LOOP p_hig_borrow_dxmzjdktz_fq (j.cyhcode, j.cyhname, v_date); END LOOP; ELSE p_hig_borrow_dxmzjdktz_fq (v_cprojectcode, v_cprojectname, v_date); END IF; --格式化 DELETE FROM t_hig_borrow_dxmzjdktz_fq t WHERE t.cdate = v_date; INSERT INTO t_hig_borrow_dxmzjdktz_fq t (fenqi, dkys, isxmoney, keyongedu, daikuanyue, idkmoney, ihkmoney, lxftszq, lxftszh, cdate, cprojectname, cprojectcode, iorder, fqcode) SELECT fenqi, fn_fmt_number (dkys, 0, 10000), fn_fmt_number (s.isxmoney, 0, 10000), fn_fmt_number (s.keyongedu, 0, 10000), fn_fmt_number (s.daikuanyue, 0, 10000), fn_fmt_number (s.idkmoney, 0, 10000), fn_fmt_number (s.ihkmoney, 0, 10000), fn_fmt_number (s.lxftszq, 0, 10000), fn_fmt_number (s.lxftszh, 0, 10000), cdate, cprojectname, cprojectcode, iorder, fqcode FROM t_hig_borrow_dxmzjdktz_fq_his s WHERE s.cdate = v_date; COMMIT; --记录日志 log_success ('calcjobs', 'HIGTBS-P_HIG_BORROW_DXMZJDKTZ_FQ', 'HIG单项目融资台账-到分期—项目 | ', '计算-成功'); EXCEPTION WHEN OTHERS THEN ROLLBACK; log_error ('calcjobs', 'HIGTBS-P_HIG_BORROW_DXMZJDKTZ_FQ', SQLCODE, SQLERRM); END rztz_fq; -- ----------------------------------------------------------------------------- -- 3、单项目融资台账-到贷款单 PROCEDURE rztz_dk (vv_date IN DATE) --截止日期 AS v_date DATE := TO_DATE (TO_CHAR (vv_date, 'YYYY-MM-DD'), 'YYYY-MM-DD'); BEGIN --清理数据先 DELETE FROM t_hig_borrow_dxmzjdktz_dk_his t WHERE t.cdate = v_date; --执行存储 p_hig_borrow_dxmzjdktz_dk (v_date); --格式化 DELETE FROM t_hig_borrow_dxmzjdktz_dk t WHERE t.cdate = v_date; INSERT INTO t_hig_borrow_dxmzjdktz_dk t (cdocument, czjfroms, csxtypename, cskfname, cfdfname, idkmoney, ddkbegindate, ddkenddate, qixian, ihkmoney, inothkmoney, iactualrate, dklly1, dklly2, dklly3, lxftszq, lxftszh, cdate, cfqname, cprojectname, cprojectcode, cfqcode) SELECT s.cdocument, s.czjfroms, s.csxtypename, s.cskfname, s.cfdfname, fn_fmt_number (s.idkmoney, 0, 10000), s.ddkbegindate, s.ddkenddate, TO_CHAR (s.qixian), fn_fmt_number (s.ihkmoney, 0, 10000), fn_fmt_number (s.inothkmoney, 0, 10000), fn_fmt_percent (NVL (s.iactualrate, 0) * 100, 2), fn_fmt_percent (NVL (s.dklly1, 0) * 100, 2), fn_fmt_percent (NVL (s.dklly2, 0) * 100, 2), fn_fmt_percent (NVL (s.dklly3, 0) * 100, 2), fn_fmt_number (s.lxftszq, 0, 10000), fn_fmt_number (s.lxftszh, 0, 10000), -- s.cdate, s.cfqname, s.cprojectname, s.cprojectcode, s.cfqcode FROM t_hig_borrow_dxmzjdktz_dk_his s WHERE s.cdate = v_date; COMMIT; log_success ('calcjobs', 'HIGTBS-P_HIG_BORROW_DXMZJDKTZ_DK', 'HIG单项目融资台账-到贷款单—项目 | ', '计算-成功'); EXCEPTION WHEN OTHERS THEN ROLLBACK; log_error ('calcjobs', 'HIGTBS-P_HIG_BORROW_DXMZJDKTZ_DK', SQLCODE, SQLERRM); END rztz_dk; -- ----------------------------------------------------------------------------- -- 4、单项目融资台账-到还款单 最新的存储 PROCEDURE rztz_hk (vv_date IN DATE) --截止日期 AS v_date DATE := TO_DATE (TO_CHAR (vv_date, 'YYYY-MM-DD'), 'YYYY-MM-DD'); BEGIN --清理数据先 DELETE FROM t_hig_borrow_dxmzjdktz_hk_his t WHERE t.cdate = v_date; --执行存储 p_hig_borrow_dxmzjdktz_hk (v_date); --格式化 DELETE FROM t_hig_borrow_dxmzjdktz_hk t WHERE t.cdate = v_date; -- INSERT INTO t_hig_borrow_dxmzjdktz_hk t (cdocument, cbankcategoryname, caccount, ihkmoney, dhkdate, cdkdocument, cdate, cprojectname, cprojectcode) SELECT cdocument, cbankcategoryname, caccount, fn_fmt_number (ihkmoney, 0, 10000), --还款金额 dhkdate, cdkdocument, cdate, cprojectname, cprojectcode FROM t_hig_borrow_dxmzjdktz_hk_his s WHERE s.cdate = v_date; COMMIT; --记录日志 log_success ('calcjobs', 'HIGTBS-P_HIG_BORROW_DXMZJDKTZ_HK', 'HIG单项目融资台账-到还款单—项目 | ', '计算-成功'); EXCEPTION WHEN OTHERS THEN ROLLBACK; log_error ('calcjobs', 'HIGTBS-P_HIG_BORROW_DXMZJDKTZ_HK', SQLCODE, SQLERRM); END rztz_hk; /* ******************************************************************************* ******************************************************* ******************************************************************************* *****************************************2、应转利息台账 ******************************************************************************* ******************************************************* */ -- ----------------------------------------------------------------------------- -- 1.全生命周期应转利息台账 PROCEDURE yzlxtz_all (vv_date IN DATE) --截止日期 AS v_cdate DATE := TO_DATE (TO_CHAR (vv_date, 'YYYY-MM-DD'), 'YYYY-MM-DD'); BEGIN /* 清理数据先 */ DELETE FROM t_hig_borrow_qxmyzlxtz_his t WHERE t.cdate = v_cdate; --执行存储 p_hig_borrow_qxmyzlxtz (v_cdate); --截止日期 --合计 /* 下面的函数的测试脚本,请直接运行,如果没有返回任何数据表示下面的函数执行没有bug。 SELECT CPROJECTNAME, ZBHLXZE, WJZZBHLX, YJZZBHLX, (WJZZBHLX+YJZZBHLX) FROM T_HIG_BORROW_QXMYZLXTZ_HIS T WHERE T.WQYZBHLX <> (T.ZBHLXZE-T.YQYZBHLX) OR T.WJZZBHLX <> (T.ZBHLXZE-T.YJZZBHLX); */ util_hejiproject ( ' UPDATE T_HIG_BORROW_QXMYZLXTZ_HIS T SET ( IDKBUDGET, --IRATE, --ITIME, ZBHLXZE, DPMZICB, IAREA, IJZAREA, YJZZBHLX, WJZZBHLX, IYJMONEY, IQYAREA, YQYZBHLX, WQYZBHLX ) = ( SELECT SUM(S.IDKBUDGET), --贷款预算 --AVG(S.IRATE), --利率 --AVG(S.ITIME), --周期 SUM(S.ZBHLXZE), --E2E资本化利息总额A --CASE WHEN SUM(T.IAREA) = 0 THEN 0 ELSE SUM(T.ZBHLXZE) / SUM(T.IAREA) END,--单㎡资金成本① SUM(S.DPMZICB), --单㎡资金成本① SUM(S.IAREA), --总可售面积D SUM(S.IJZAREA), --已结转面积② --SUM(S.DPMZICB) * SUM(S.IJZAREA), --已结转资本化利息=①*② SUM(S.YJZZBHLX), --已结转资本化利息=①*② --SUM(S.ZBHLXZE) - SUM(S.YJZZBHLX), --未结转资本化利息 SUM(S.WJZZBHLX), --未结转资本化利息 SUM(S.IYJMONEY), --实际应计利C SUM(S.IQYAREA), --已签约面积3 SUM(S.YQYZBHLX), --已签约资本化利息D=①*3 --SUM(S.ZBHLXZE) - SUM(S.YQYZBHLX) --未签约资本化利息 SUM(S.WQYZBHLX)--未签约资本化利息 FROM T_HIG_BORROW_QXMYZLXTZ_HIS S WHERE S.CPROJECTCODE IN(HEJI_CHILLDRENS) AND S.CDATE = :2 ) WHERE T.CPROJECTCODE = :3 AND T.CDATE = :4 AND T.CSTATUS = ''N'' ', v_cdate); --格式化 DELETE FROM t_hig_borrow_qxmyzlxtz t WHERE t.cdate = v_cdate; /* 涉及面积的(只要有面积两个词的),需要格式化到元,去除小数,以千分位格式化,例子:FN_FMT_NUMBER(S.DPMZICB, 0, 0) 涉及到金额的,需要格式化到万,去除小数,以千分位格式化 FN_FMT_NUMBER(S.IYJMONEY, 0, 10000), */ INSERT INTO t_hig_borrow_qxmyzlxtz t (t.cdate, t.cprojectcode, t.cprojectname, t.dpmzicb, t.iarea, t.idkbudget, t.ijzarea, t.iorder, t.irate, t.itime, t.iyjmoney, t.wjzzbhlx, t.yjzzbhlx, t.zbhlxze, t.cprojectnamefmt, t.iqyarea, t.yqyzbhlx, t.wqyzbhlx, t.cstatus) SELECT s.cdate, s.cprojectcode, s.cprojectname, fn_fmt_number (s.dpmzicb, 4, 10000), --单平米 资金成本 (格式化到万元) fn_fmt_number (s.iarea, 0, 0), --总可售面积 fn_fmt_number (s.idkbudget, 0, 10000), --贷款预算 fn_fmt_number (s.ijzarea, 0, 0), --已结转面积② s.iorder, fn_fmt_percent (NVL (s.irate, 0) * 100, 1), --利率 s.itime, fn_fmt_number (s.iyjmoney, 0, 10000), --4.实际应计利息C fn_fmt_number (s.wjzzbhlx, 0, 10000), --未结转资本化利息 fn_fmt_number (s.yjzzbhlx, 0, 10000), --已结转资本化利息B=①*② fn_fmt_number (s.zbhlxze, 0, 10000), --E2E资本化利息总额A s.cprojectnamefmt, fn_fmt_number (s.iqyarea, 0, 0), --已签约面积3 fn_fmt_number (s.yqyzbhlx, 0, 10000), --已签约资本化利息D=①*3 fn_fmt_number (s.wqyzbhlx, 0, 10000), --未签约资本化利息 s.cstatus --是否是项目 FROM t_hig_borrow_qxmyzlxtz_his s WHERE s.cdate = v_cdate; COMMIT; /*记录日志*/ log_success ('calcjobs', 'HIGTBS-P_HIG_BORROW_QXMYZLXTZ', 'HIG全生命周期应转利息台账—项目 | ', '计算-成功'); EXCEPTION WHEN OTHERS THEN ROLLBACK; log_error ('calcjobs', 'HIGTBS-P_HIG_BORROW_QXMYZLXTZ', SQLCODE, SQLERRM); END yzlxtz_all; -- ----------------------------------------------------------------------------- -- 3.单项目应转利息台账 PROCEDURE yzlxtz_one (vv_date IN DATE, --截止日期 v_cprojectcode IN VARCHAR2 DEFAULT NULL, --项目编码 v_cprojectname IN VARCHAR2 DEFAULT NULL --项目名称 ) AS v_cdate DATE := TO_DATE (TO_CHAR (vv_date, 'YYYY-MM-DD'), 'YYYY-MM-DD'); BEGIN /* 清理数据先,将当天已经查询过的数据都清除 T.CPROJECTCODE =V_CPROJECTCODE OR T.CPROJECTNAME = V_CPROJECTNAME -- AND */ DELETE FROM t_hig_borrow_dxmyzlxtz_his t WHERE t.cdate = v_cdate; --循环计算 IF v_cprojectcode IS NULL AND v_cprojectname IS NULL THEN FOR j IN (SELECT t.cyhcode, t.cyhname FROM t_hig_szproject t) LOOP p_hig_borrow_dxmyzlxtz (j.cyhcode, j.cyhname, v_cdate); END LOOP; ELSE p_hig_borrow_dxmyzlxtz (v_cprojectcode, v_cprojectname, v_cdate); END IF; /* 格式化 todo,直接将当前时间v——date,的数据统统格式化到,显示表中 */ DELETE FROM t_hig_borrow_dxmyzlxtz t WHERE t.cdate = v_cdate; /* 所有与面积有关的,都格式化为元,千分位格式显示,无小数 所有与金额有关的,都格式化为万,千分位格式显示,无效书 */ INSERT INTO t_hig_borrow_dxmyzlxtz t (t.cdate, t.cinstallmentname, t.cprojectcode, t.cprojectname, t.dpmzicb, t.iarea, t.idkbudget, t.ijzarea, t.iorder, t.iqyarea, t.irate, t.itime, t.iyjmoney, t.wjzzbhlx, t.wqyzbhlx, t.yjzzbhlx, t.yqyzbhlx, t.zbhlxze) SELECT s.cdate, s.cinstallmentname, s.cprojectcode, s.cprojectname, fn_fmt_number (s.dpmzicb, 4, 10000), --单㎡资金成本 fn_fmt_number (s.iarea, 0, 0), --总可售面积 fn_fmt_number (s.idkbudget, 0, 10000), --贷款预算 fn_fmt_number (s.ijzarea, 0, 0), --已结转面积 s.iorder, fn_fmt_number (s.iqyarea, 0, 0), --已签约面积 fn_fmt_percent (NVL (s.irate, 0) * 100, 1), --利率 fn_fmt_number (s.itime, 1), --周期 格式化一位小数 fn_fmt_number (s.iyjmoney, 0, 10000), --3.实际应计利息C fn_fmt_number (s.wjzzbhlx, 0, 10000), --未结转资本化利息 fn_fmt_number (s.wqyzbhlx, 0, 10000), --未签约资本化利息 fn_fmt_number (s.yjzzbhlx, 0, 10000), --已结转资本化利息B=①*② fn_fmt_number (s.yqyzbhlx, 0, 10000), --已签约资本化利息D=①*3 fn_fmt_number (s.zbhlxze, 0, 10000) --E2E资本化利息总额A FROM t_hig_borrow_dxmyzlxtz_his s WHERE s.cdate = v_cdate; COMMIT; /*记录日志*/ log_success ('calcjobs', 'HIGTBS-P_HIG_BORROW_DXMYZLXTZ', 'HIG全生命周期应转利息台账—项目 | ', '计算-成功'); COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; log_error ('calcjobs', 'HIGTBS-P_HIG_BORROW_DXMYZLXTZ', SQLCODE, SQLERRM); END yzlxtz_one; /* ******************************************************************************* ******************************************************* ******************************************************************************* *****************************************3、应计利息台账 ******************************************************************************* ******************************************************* */ -- ----------------------------------------------------------------------------- -- 1.全项目应计利息台账 PROCEDURE yjlxtz_all (vv_date IN DATE) --截止日期 AS v_date DATE := TO_DATE (TO_CHAR (vv_date, 'YYYY-MM-DD'), 'YYYY-MM-DD'); BEGIN /* 清理数据先 */ DELETE FROM t_hig_borrow_qxmyjlxtz_his t WHERE t.cdate = v_date; /* 执行存储 */ p_hig_borrow_qxmyjlxtz (v_date); /* 合计 */ util_hejiproject ('UPDATE T_HIG_BORROW_QXMYJLXTZ_HIS T SET ( T.HJZJCBLXZDTYS, T.HJLJYJLX, T.HJBNYS, T.HJBNSJ, T.HJBNC, T.HJBYYS, T.HJBYSJ, T.HJBYC, T.CJBNLJ, T.CJBYLJ, T.GDYJLXYS, T.GDLJYJLX, T.GDBNYS, T.GDBNSJ, T.GDBNC, T.GDBYYS, T.GDBYSJ, T.GDBYC, T.KFYJLXYS, T.KFLJYJLX, T.KFBNYS, T.KFBNSJ, T.KFBNC, T.KFBYYS, T.KFBYSJ, T.KFBYC ) = ( SELECT SUM(S.HJZJCBLXZDTYS), SUM(S.HJLJYJLX), SUM(S.HJBNYS), SUM(S.HJBNSJ), SUM(S.HJBNC), SUM(S.HJBYYS), SUM(S.HJBYSJ), SUM(S.HJBYC), SUM(S.CJBNLJ), SUM(S.CJBYLJ), SUM(S.GDYJLXYS), SUM(S.GDLJYJLX), SUM(S.GDBNYS), SUM(S.GDBNSJ), SUM(S.GDBNC), SUM(S.GDBYYS), SUM(S.GDBYSJ), SUM(S.GDBYC), SUM(S.KFYJLXYS), SUM(S.KFLJYJLX), SUM(S.KFBNYS), SUM(S.KFBNSJ), SUM(S.KFBNC), SUM(S.KFBYYS), SUM(S.KFBYSJ), SUM(S.KFBYC) FROM T_HIG_BORROW_QXMYJLXTZ_HIS S WHERE S.CPROJECTCODE IN(HEJI_CHILLDRENS) AND T.CDATE = :2 ) WHERE T.CPROJECTCODE = :3 AND T.CDATE = :4 AND T.CSTATUS = ''N'' ', v_date); /* 格式化 */ DELETE FROM t_hig_borrow_qxmyjlxtz t WHERE t.cdate = v_date; INSERT INTO t_hig_borrow_qxmyjlxtz t (t.cdate, t.cjbnlj, t.cjbylj, t.cprojectcode, t.cprojectname, t.gdbnc, t.gdbnsj, t.gdbnys, t.gdbyc, t.gdbysj, t.gdbyys, t.gdljyjlx, t.gdyjlxys, t.hjbnc, t.hjbnsj, t.hjbnys, t.hjbyc, t.hjbysj, t.hjbyys, t.hjljyjlx, t.hjzjcblxzdtys, t.iorder, t.jytz, t.kfbnc, t.kfbnsj, t.kfbnys, t.kfbyc, t.kfbysj, t.kfbyys, t.kfljyjlx, t.kfyjlxys, t.cprojectnamefmt, t.cstatus) SELECT s.cdate, fn_fmt_number (s.cjbnlj, 0, 10000), --本年累计 内部资金拆借利息 fn_fmt_number (s.cjbylj, 0, 10000), --本月累计 内部资金拆借利息 s.cprojectcode, s.cprojectname, fn_fmt_number (s.gdbnc, 0, 10000), fn_fmt_number (s.gdbnsj, 0, 10000), fn_fmt_number (s.gdbnys, 0, 10000), fn_fmt_number (s.gdbyc, 0, 10000), fn_fmt_number (s.gdbysj, 0, 10000), fn_fmt_number (s.gdbyys, 0, 10000), fn_fmt_number (s.gdljyjlx, 0, 10000), fn_fmt_number (s.gdyjlxys, 0, 10000), fn_fmt_number (s.hjbnc, 0, 10000), fn_fmt_number (s.hjbnsj, 0, 10000), fn_fmt_number (s.hjbnys, 0, 10000), fn_fmt_number (s.hjbyc, 0, 10000), fn_fmt_number (s.hjbysj, 0, 10000), fn_fmt_number (s.hjbyys, 0, 10000), fn_fmt_number (s.hjljyjlx, 0, 10000), fn_fmt_number (s.hjzjcblxzdtys, 0, 10000), s.iorder, s.jytz, fn_fmt_number (s.kfbnc, 0, 10000), fn_fmt_number (s.kfbnsj, 0, 10000), fn_fmt_number (s.kfbnys, 0, 10000), fn_fmt_number (s.kfbyc, 0, 10000), fn_fmt_number (s.kfbysj, 0, 10000), fn_fmt_number (s.kfbyys, 0, 10000), fn_fmt_number (s.kfljyjlx, 0, 10000), fn_fmt_number (s.kfyjlxys, 0, 10000), s.cprojectnamefmt, cstatus FROM t_hig_borrow_qxmyjlxtz_his s WHERE s.cdate = v_date; COMMIT; --记录日志 log_success ('calcjobs', 'HIGTBS-P_HIG_BORROW_QXMYJLXTZ', 'HIG全项目应计利息台账—项目 | ', '计算-成功'); EXCEPTION WHEN OTHERS THEN ROLLBACK; log_error ('calcjobs', 'HIGTBS-P_HIG_BORROW_QXMYJLXTZ', SQLCODE, SQLERRM); END yjlxtz_all; -- ----------------------------------------------------------------------------- -- 2.单项目应计利息台账 PROCEDURE yjlxtz_one (vv_date IN DATE, --截止日期 v_cprojectcode IN VARCHAR2 DEFAULT NULL, --项目编码 v_cprojectname IN VARCHAR2 DEFAULT NULL) --项目名称 AS v_date DATE := TO_DATE (TO_CHAR (vv_date, 'YYYY-MM-DD'), 'YYYY-MM-DD'); BEGIN --清理数据先 DELETE FROM t_hig_borrow_dxmyjlxtz_his t WHERE t.cdate = v_date; --插入数据的日期 IF v_cprojectcode IS NULL AND v_cprojectname IS NULL THEN --循环计算 FOR j IN (SELECT t.cyhcode, t.cyhname FROM t_hig_szproject t WHERE t.cstatus = y AND t.byzflag = 0 --haier要求只显示这样的数据 ) LOOP p_hig_borrow_dxmyjlxtz (j.cyhcode, j.cyhname, v_date); END LOOP; ELSE p_hig_borrow_dxmyjlxtz (v_cprojectcode, v_cprojectname, v_date); END IF; /* 格式化 */ DELETE FROM t_hig_borrow_dxmyjlxtz t WHERE t.cdate = v_date; INSERT INTO t_hig_borrow_dxmyjlxtz t (t.bnijxmoney, t.bnijxmoneycj, t.byijxmoney, t.byijxmoneycj, t.cdate, t.cdkdocument, t.cinstallmentname, t.cprojectcode, t.cprojectname, t.csxtypename, t.czjfroms, t.ddkbegindate, t.dhkdate, t.idkmoney, t.ijxmoney, t.inothkmoney, t.iorder, t.iyfrate, t.iyjrate) SELECT fn_fmt_number (s.bnijxmoney, 0, 10000), --本年累计应计利息 fn_fmt_number (s.bnijxmoneycj, 0, 10000), --本年累计内部拆借利息 fn_fmt_number (s.byijxmoney, 0, 10000), --本月应计利息 fn_fmt_number (s.byijxmoneycj, 0, 10000), --本月内部拆借利息 s.cdate, s.cdkdocument, s.cinstallmentname, s.cprojectcode, s.cprojectname, s.csxtypename, s.czjfroms, s.ddkbegindate, s.dhkdate, fn_fmt_number (s.idkmoney, 0, 10000), --贷款总金额 fn_fmt_number (s.ijxmoney, 0, 10000), --累计应计利息 fn_fmt_number (s.inothkmoney, 0, 10000), --贷款余额 s.iorder, fn_fmt_percent (NVL (s.iyfrate, 0) * 100, 2), --应付利率 fn_fmt_percent (NVL (s.iyjrate, 0) * 100, 2) --应计利率 FROM t_hig_borrow_dxmyjlxtz_his s WHERE s.cdate = v_date; COMMIT; --日志 log_success ('calcjobs', 'HIGTBS-P_HIG_BORROW_DXMYJLXTZ', 'HIG单项目应计利息台账—项目 | ', '计算-成功'); EXCEPTION WHEN OTHERS THEN ROLLBACK; log_error ('calcjobs', 'HIGTBS-P_HIG_BORROW_DXMYJLXTZ', SQLCODE, SQLERRM); END yjlxtz_one; /* ******************************************************************************* ******************************************************* ******************************************************************************* *****************************************4、应付利息台账 ******************************************************************************* ******************************************************* */ -- -------------------------------------------------------------------------------------------- -- 4、应付利息台账 /* 1全项目应付利息台账 */ PROCEDURE yflxtz_all (vv_date IN DATE) --截止日期 AS v_date DATE := TO_DATE (TO_CHAR (vv_date, 'YYYY-MM-DD'), 'YYYY-MM-DD'); BEGIN --清理 DELETE FROM t_hig_borrow_qxmyflxtz_his t WHERE t.cdate = v_date; --执行存储 p_hig_borrow_qxmyflxtz (v_date); --合计 util_hejiproject ('UPDATE T_HIG_BORROW_QXMYFLXTZ_HIS T SET ( LJZF, LJYFGDTR, LJYFGDTRLX, LJWFGDTR, LJYFKFD, LJYFKFDLX, BNLJZF, BNYFGDTR, BNYFGDTRLX, BNWFGDTR, BNYFKFD, BNYFKFDLX ) = ( SELECT SUM(LJZF), SUM(LJYFGDTR), SUM(LJYFGDTRLX), SUM(LJWFGDTR), SUM(LJYFKFD), SUM(LJYFKFDLX), SUM(BNLJZF), SUM(BNYFGDTR), SUM(BNYFGDTRLX), SUM(BNWFGDTR), SUM(BNYFKFD), SUM(BNYFKFDLX) FROM T_HIG_BORROW_QXMYFLXTZ_HIS S WHERE S.CPROJECTCODE IN(HEJI_CHILLDRENS) AND S.CDATE = :2 ) WHERE T.CPROJECTCODE = :3 AND T.CDATE = :4 AND T.CSTATUS = ''N'' ', v_date); --格式化 DELETE FROM t_hig_borrow_qxmyflxtz t WHERE t.cdate = v_date; INSERT INTO t_hig_borrow_qxmyflxtz t (xmmc, jytz, ljzf, ljyfgdtr, ljyfgdtrlx, ljwfgdtr, ljyfkfd, ljyfkfdlx, bnljzf, bnyfgdtr, bnyfgdtrlx, bnwfgdtr, bnyfkfd, bnyfkfdlx, cdate, cprojectcode, cprojectnamefmt, cstatus, iorder) SELECT s.xmmc, s.jytz, --全部格式化到万 fn_fmt_number (s.ljzf, 0, 10000), fn_fmt_number (s.ljyfgdtr, 0, 10000), fn_fmt_number (s.ljyfgdtrlx, 0, 10000), fn_fmt_number (s.ljwfgdtr, 0, 10000), fn_fmt_number (s.ljyfkfd, 0, 10000), fn_fmt_number (s.ljyfkfdlx, 0, 10000), fn_fmt_number (s.bnljzf, 0, 10000), fn_fmt_number (s.bnyfgdtr, 0, 10000), fn_fmt_number (s.bnyfgdtrlx, 0, 10000), fn_fmt_number (s.bnwfgdtr, 0, 10000), fn_fmt_number (s.bnyfkfd, 0, 10000), fn_fmt_number (s.bnyfkfdlx, 0, 10000), s.cdate, s.cprojectcode, s.cprojectnamefmt, s.cstatus, s.iorder FROM t_hig_borrow_qxmyflxtz_his s WHERE s.cdate = v_date; COMMIT; --日志 log_success ('calcjobs', 'HIGTBS-P_HIG_BORROW_DXMYFLXTZ', 'HIG全项目应付利息台账—项目 | ', '计算-成功'); EXCEPTION WHEN OTHERS THEN ROLLBACK; log_error ('calcjobs', 'HIGTBS-P_HIG_BORROW_DXMYFLXTZ', SQLCODE, SQLERRM); END yflxtz_all; /* 2单项目应付利息台账-到分期 */ PROCEDURE yflxtz_fq (vv_date IN DATE, --截止日期 v_cprojectcode IN VARCHAR2 DEFAULT NULL, --项目编码 v_cprojectname IN VARCHAR2 DEFAULT NULL) --项目名称 AS v_date DATE := TO_DATE (TO_CHAR (vv_date, 'YYYY-MM-DD'), 'YYYY-MM-DD'); BEGIN --清理 DELETE FROM t_hig_borrow_dxmyflxtz_fq_his t WHERE t.cdate = v_date; --执行存储 p_hig_borrow_dxmyflxtz_fq (v_date, NULL, NULL); --格式化 DELETE FROM t_hig_borrow_dxmyflxtz_fq t WHERE t.cdate = v_date; INSERT INTO t_hig_borrow_dxmyflxtz_fq t (fq, ljzf, ljyfgdtr, ljyfgdtrlx, ljwfgdtr, ljyfkfd, ljyfkfdlx, bnljzf, bnyfgdtr, bnyfgdtrlx, bnwfgdtr, bnyfkfd, bnyfkfdlx, byyfgdtr, byyfgdtrlx, bywfgdtr, byyfkfd, byyfkfdlx, cdate, cprojectcode, cprojectname, iorder, fqcode) SELECT s.fq, fn_fmt_number (s.ljzf, 0, 10000), fn_fmt_number (s.ljyfgdtr, 0, 10000), fn_fmt_number (s.ljyfgdtrlx, 0, 10000), fn_fmt_number (s.ljwfgdtr, 0, 10000), fn_fmt_number (s.ljyfkfd, 0, 10000), fn_fmt_number (s.ljyfkfdlx, 0, 10000), fn_fmt_number (s.bnljzf, 0, 10000), fn_fmt_number (s.bnyfgdtr, 0, 10000), fn_fmt_number (s.bnyfgdtrlx, 0, 10000), fn_fmt_number (s.bnwfgdtr, 0, 10000), fn_fmt_number (s.bnyfkfd, 0, 10000), fn_fmt_number (s.bnyfkfdlx, 0, 10000), fn_fmt_number (s.byyfgdtr, 0, 10000), fn_fmt_number (s.byyfgdtrlx, 0, 10000), fn_fmt_number (s.bywfgdtr, 0, 10000), fn_fmt_number (s.byyfkfd, 0, 10000), fn_fmt_number (s.byyfkfdlx, 0, 10000), s.cdate, s.cprojectcode, s.cprojectname, s.iorder, s.fqcode FROM t_hig_borrow_dxmyflxtz_fq_his s WHERE s.cdate = v_date; COMMIT; --日志 log_success ('calcjobs', 'HIGTBS-P_HIG_BORROW_DXMYFLXTZ_FQ', 'HIG单项目应付利息台账-到分期—项目 | ', '计算-成功'); EXCEPTION WHEN OTHERS THEN ROLLBACK; log_error ('calcjobs', 'HIGTBS-P_HIG_BORROW_DXMYFLXTZ_FQ', SQLCODE, SQLERRM); END yflxtz_fq; /* 2单项目应付利息台账-到单据 */ PROCEDURE yflxtz_dk (vv_date IN DATE, --截止日期 v_cprojectcode IN VARCHAR2 DEFAULT NULL, --项目编码 v_cprojectname IN VARCHAR2 DEFAULT NULL) --项目名称 AS v_date DATE := TO_DATE (TO_CHAR (vv_date, 'YYYY-MM-DD'), 'YYYY-MM-DD'); BEGIN --清理 DELETE FROM t_hig_borrow_dxmyflxtz_dk_his t; -- p_hig_borrow_dxmyflxtz_dk (NULL, NULL, NULL); DELETE FROM t_hig_borrow_dxmyflxtz_dk t; INSERT INTO t_hig_borrow_dxmyflxtz_dk t (dkdh, fq, zjsx, zjly, dkzje, yingflx, yiflx, weiflx, cprojectcode, cprojectname, iorder, fqcode) SELECT dkdh, fq, zjsx, zjly, fn_fmt_number (s.dkzje, 0, 10000), fn_fmt_number (s.yingflx, 0, 10000), fn_fmt_number (s.yiflx, 0, 10000), fn_fmt_number (s.weiflx, 0, 10000), cprojectcode, cprojectname, iorder, fqcode FROM t_hig_borrow_dxmyflxtz_dk_his s; COMMIT; --日志 log_success ('calcjobs', 'HIGTBS-P_HIG_BORROW_DXMYFLXTZ_DK', 'HIG单项目应付利息台账-到单据—项目 | ', '计算-成功'); EXCEPTION WHEN OTHERS THEN ROLLBACK; log_error ('calcjobs', 'HIGTBS-P_HIG_BORROW_DXMYFLXTZ_DK', SQLCODE, SQLERRM); END yflxtz_dk; ----------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------- -- 下面是私有方法,禁止调用 ----------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------- -- DDL for Procedure P_HIG_BORROW_DXMZJDKTZ_FQ -------------------------------------------------------- PROCEDURE p_hig_borrow_dxmzjdktz_fq (v_cprojectcode IN VARCHAR2, --项目编码 v_cprojectname IN VARCHAR2, --项目名称 v_date IN DATE) --截止日期 /* 2.单项目融资台账-到分期 yinbin */ AS --贷款表的每行的类型 --T_HIG_BORROW_DK T_HIG_BORROW_DK%ROWTYPE; --temp表的每行的类型 t_qxmzjdktz_fq t_hig_borrow_dxmzjdktz_fq_his%ROWTYPE; --游标 查询单个项目,按照分期分组和排序 CURSOR cur_qxmzjdktz_fq (cv_cprojectcode VARCHAR2, cv_cprojectname VARCHAR2, cv_date DATE) IS SELECT b.idkbudget, --贷款预算 f.cinstallmentcode, -- 分期编码 f.cinstallmentname, --分期 f.iorder FROM t_hig_rzqzqbudget b LEFT JOIN t_hig_szinstallment f ON b.cinstallmentcode = f.cinstallmentcode WHERE b.cstatus = y --仅仅查询有效的贷款单 AND b.cprojectcode = cv_cprojectcode -- AND FN_DATE('JD',B.DCREATEDATE,V_DATE)=1 ORDER BY f.iorder; --按照分期排序 --游标 查询全周期预算 -- CURSOR CUR_DKYS(CV_CPROJECTCODE VARCHAR2,CV_CPROJECTNAME VARCHAR2, -- CV_FENQI VARCHAR2) -- IS -- SELECT -- NVL(T.IDKBUDGET,0)--项目每个分期预算 -- FROM -- T_HIG_RZQZQBUDGET T -- WHERE -- T.CSTATUS =Y -- AND T.CPROJECTCODE =CV_CPROJECTCODE -- AND T.CINSTALLMENTCODE =CV_FENQI; --分期 --已付利息 p_yflx_his NUMBER (18, 4) := 0; --应计利息 p_yjlx_his NUMBER (18, 4) := 0; --分期 -- P_FQ T_HIG_BORROW_DK.CINSTALLMENTNAME%TYPE; --临时变量 p_num NUMBER := 0; BEGIN SELECT COUNT (*) INTO p_num FROM t_hig_borrow_dk t WHERE t.cstatus = y --仅仅查询有效的贷款单 AND t.cprojectcode = v_cprojectcode AND fn_date ('JD', t.ddkbegindate, v_date) = 1; IF p_num <= 0 THEN RETURN; END IF; --循环计算每个分期 OPEN cur_qxmzjdktz_fq (v_cprojectcode, v_cprojectname, v_date); IF cur_qxmzjdktz_fq%NOTFOUND THEN sys.DBMS_OUTPUT.put_line ('WARN:根据您输入的参数无法查出任何数据!EXITED'); RETURN; END IF; LOOP FETCH cur_qxmzjdktz_fq INTO t_qxmzjdktz_fq.dkys, t_qxmzjdktz_fq.fqcode, --计算 分期 t_qxmzjdktz_fq.fenqi, --计算 分期 t_qxmzjdktz_fq.iorder; EXIT WHEN cur_qxmzjdktz_fq%NOTFOUND; -- P_NUM:=P_NUM+1; -- SYS.DBMS_OUTPUT.PUT_LINE( ' -----------------------------------------------------分期:'|| -- T_QXMZJDKTZ_FQ.FENQI); /*查询条件固定:项目名称+分期+日期小于v_date,因为游标已经分组,则这里不用分组了*/ --查询授信额度A SELECT NVL (SUM (NVL (t.isxmoney, 0)), 0) --授信金额 INTO t_qxmzjdktz_fq.isxmoney --授信额度A FROM t_hig_borrow_sx t WHERE t.cstatus = y AND (t.cprojectname = v_cprojectname OR t.cprojectcode = v_cprojectcode) --项目名称 AND t.cinstallmentcode = t_qxmzjdktz_fq.fqcode; --分期 -- IF SQL%ROWCOUNT =1 THEN -- SYS.DBMS_OUTPUT.PUT_LINE('INFO:计算:授信额度A 成功!'); -- END IF; --贷款合计B SELECT NVL (SUM (NVL (t.idkmoney, 0)), 0) --贷款金额 INTO t_qxmzjdktz_fq.idkmoney --贷款合计B FROM t_hig_borrow_dk t WHERE t.cstatus = y AND (t.cprojectname = v_cprojectname OR t.cprojectcode = v_cprojectcode) --项目名称 AND t.cinstallmentcode = t_qxmzjdktz_fq.fqcode --分期 AND fn_date ('JD', t.ddkbegindate, v_date) = 1; --GROUP BY T.CINSTALLMENTNAME; --这种情况下group by多此一举 -- IF SQL%ROWCOUNT > 0 THEN -- SYS.DBMS_OUTPUT.PUT_LINE('INFO:计算:贷款合计B 成功!'); -- END IF; --查询还款合计D 从hk表 SELECT NVL (SUM (NVL (t.ihkmoney, 0)), 0) INTO t_qxmzjdktz_fq.ihkmoney --还款合计D FROM t_hig_borrow_hk t WHERE t.cstatus = y AND (t.cprojectname = v_cprojectname OR t.cprojectcode = v_cprojectcode) --项目名称 AND t.cinstallmentname = t_qxmzjdktz_fq.fenqi --分期 AND fn_date ('JD', t.dhkdate, v_date) = 1; -- IF SQL%ROWCOUNT > 0 THEN -- SYS.DBMS_OUTPUT.PUT_LINE('INFO:计算:还款合计D 成功!'); -- END IF; -- BEGIN -- SELECT -- NVL(SUM(T.IDKBUDGET),0)--项目每个分期预算 -- INTO -- T_QXMZJDKTZ_FQ.DKYS -- FROM -- T_HIG_RZQZQBUDGET T -- WHERE -- T.CSTATUS =Y -- AND T.CPROJECTCODE =T_QXMZJDKTZ_FQ.CPROJECTCODE -- AND T.CINSTALLMENTNAME =T_QXMZJDKTZ_FQ.FENQI; --分期 -- -- OPEN CUR_DKYS(V_CPROJECTCODE,V_CPROJECTNAME, -- T_QXMZJDKTZ_FQ.FENQI); -- -- FETCH -- -- CUR_DKYS -- -- INTO -- -- T_QXMZJDKTZ_FQ.DKYS; -- -- CLOSE CUR_DKYS; -- EXCEPTION -- WHEN OTHERS THEN -- T_QXMZJDKTZ_FQ.DKYS:=0; -- END ; --查询利息分摊 四证前 四证后, 从计息单表/还息单表 -----------------------------已付利息 计算 SELECT NVL (SUM (NVL (t.iyfmoney, 0)), 0) --已付利息金额 INTO p_yflx_his FROM t_hig_borrow_jx t WHERE t.cstatus = y AND (t.cprojectname = v_cprojectname --项目名称 OR t.cprojectcode = v_cprojectcode) --项目编码 AND t.cinstallmentname = t_qxmzjdktz_fq.fenqi --分期 AND fn_date ('JD', t.djxenddate, v_date) = 1 AND t.csxtypecode = zjsx.kf; --业务要求仅仅查询计算 开发贷款 有关的数据; -- IF SQL%NOTFOUND THEN -- SYS.DBMS_OUTPUT.PUT_LINE('WARN:还没有已付利息,为0'); -- END IF; -----------------------------应计利息 计算 SELECT NVL (SUM (NVL (t.iyjmoney, 0)), 0) --应计利息金额 INTO p_yjlx_his FROM t_hig_borrow_jx t WHERE t.cstatus = y AND (t.cprojectname = v_cprojectname --项目名称 OR t.cprojectcode = v_cprojectcode) --项目编码 AND t.cinstallmentname = t_qxmzjdktz_fq.fenqi --分期 AND fn_date ('JD', t.djxenddate, v_date) = 1 AND t.csxtypecode = zjsx.kf; --业务要求仅仅查询计算 开发贷款 有关的数据; -- IF SQL%NOTFOUND THEN -- SYS.DBMS_OUTPUT.PUT_LINE('WARN:还没有应计利息,为0'); -- END IF; --利息分摊 四证前 t_qxmzjdktz_fq.lxftszq := NVL (p_yflx_his, 0) - NVL (p_yjlx_his, 0); --利息分摊 四证后 t_qxmzjdktz_fq.lxftszh := NVL (p_yjlx_his, 0); -- DBMS_OUTPUT.PUT_LINE('INFO:计算:利息分摊 成功'); -- DBMS_OUTPUT.PUT_LINE('INFO:利息分摊分别是,前:'||T_QXMZJDKTZ_FQ.LXFTSZQ||',后:' -- || T_QXMZJDKTZ_FQ.LXFTSZH); --计算可用额度C=A-B、贷款余额E=B-D t_qxmzjdktz_fq.keyongedu := NVL (t_qxmzjdktz_fq.isxmoney, 0) - NVL (t_qxmzjdktz_fq.idkmoney, 0); t_qxmzjdktz_fq.daikuanyue := NVL (t_qxmzjdktz_fq.idkmoney, 0) - NVL (t_qxmzjdktz_fq.ihkmoney, 0); -- SYS.DBMS_OUTPUT.PUT_LINE('INFO:计算:可用额度C=A-B、贷款余额E=B-D 成功!'); --插入表,end INSERT INTO t_hig_borrow_dxmzjdktz_fq_his (fenqi, dkys, isxmoney, keyongedu, daikuanyue, idkmoney, ihkmoney, lxftszq, lxftszh, cdate, cprojectname, cprojectcode, iorder, fqcode) VALUES (t_qxmzjdktz_fq.fenqi, t_qxmzjdktz_fq.dkys, t_qxmzjdktz_fq.isxmoney, t_qxmzjdktz_fq.keyongedu, t_qxmzjdktz_fq.daikuanyue, t_qxmzjdktz_fq.idkmoney, t_qxmzjdktz_fq.ihkmoney, t_qxmzjdktz_fq.lxftszq, t_qxmzjdktz_fq.lxftszh, v_date, CASE WHEN v_cprojectname IS NULL THEN (SELECT cprojectname FROM t_hig_borrow_dk t WHERE t.cprojectcode = v_cprojectcode) ELSE v_cprojectname END, CASE WHEN v_cprojectcode IS NULL THEN (SELECT t.cprojectcode FROM t_hig_borrow_dk t WHERE t.cprojectname = v_cprojectname) ELSE v_cprojectcode END, t_qxmzjdktz_fq.iorder, t_qxmzjdktz_fq.fqcode); END LOOP; CLOSE cur_qxmzjdktz_fq; -- COMMIT; -- IF P_NUM <=0 THEN -- RETURN; -- END IF; --合计 可以不分组,因为默认已经分组 INSERT INTO t_hig_borrow_dxmzjdktz_fq_his t (fenqi, dkys, isxmoney, keyongedu, daikuanyue, idkmoney, ihkmoney, lxftszq, lxftszh, cdate, cprojectname, cprojectcode, iorder, fqcode) SELECT heji_name, SUM (s.dkys), SUM (s.isxmoney), SUM (s.keyongedu), SUM (s.daikuanyue), SUM (s.idkmoney), SUM (s.ihkmoney), SUM (s.lxftszq), SUM (s.lxftszh), v_date, v_cprojectname, v_cprojectcode, 1, heji_code --先这样用吧 FROM t_hig_borrow_dxmzjdktz_fq_his s WHERE s.cdate = v_date AND (s.cprojectcode = v_cprojectcode OR s.cprojectname = v_cprojectname); COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; RAISE; END p_hig_borrow_dxmzjdktz_fq; -------------------------------------------------------- -- DDL for Procedure P_HIG_BORROW_QXMYJLXTZ2 老版本的存储,测试全部通过,还可以用 -------------------------------------------------------- PROCEDURE p_hig_borrow_qxmyjlxtz2 (v_date IN DATE) --截止日期 IS /* 全项目应计利息台账 yinbin */ --temp表的每行的类型 t_qxmyjlxtz t_hig_borrow_qxmyjlxtz_his%ROWTYPE; -- 游标 查询项目名称 todo 可能会根据业务进行修改 CURSOR cur_szproject (cv_bflag NUMBER) --合法的数据 IS SELECT /*T.CYHCODE,--项目编码*/ t.cyhcode, --项目编码 t.cyhname, --项目名称 t.cxmjytz, --项目经营体长 t.iorder, --项目排序 t.cprojectname, --格式化后的项目名称 t.cstatus --是否是项目 FROM t_hig_szproject t WHERE -- T.CSTATUS = Y AND --是项目,TODO -- T.BYZFLAG =0 AND --haier要求只计算这部分数据。 t.bflag = cv_bflag; --状态合法 --本年 需要改为 sysdate '2012-03-07' p_bennian NUMBER := EXTRACT (YEAR FROM v_date); --本月 需要改为 sysdate p_benyue NUMBER := EXTRACT (MONTH FROM v_date); /*--项目编码临时变量 P_CPROJECTCODE VARCHAR2(20);*/ BEGIN /* 验证 */ IF v_date IS NULL THEN -- SYS.DBMS_OUTPUT.PUT_LINE('v_date不能为null') ; RETURN; END IF; /* 循环每一个总项目 */ OPEN cur_szproject (0); IF cur_szproject%NOTFOUND THEN -- SYS.DBMS_OUTPUT.PUT_LINE('警告:根据您输入的参数无法查出任何数据!EXITED') ; RETURN; END IF; LOOP FETCH cur_szproject INTO t_qxmyjlxtz.cprojectcode, --项目编码 t_qxmyjlxtz.cprojectname, --项目名称 t_qxmyjlxtz.jytz, --经营体长 t_qxmyjlxtz.iorder, --项目排序 t_qxmyjlxtz.cprojectnamefmt, --格式化后的项目名称 t_qxmyjlxtz.cstatus; --是否是项目 EXIT WHEN cur_szproject%NOTFOUND; -- DBMS_OUTPUT.PUT_LINE(T_QXMYJLXTZ.CPROJECTNAME || ' ' || -- T_QXMYJLXTZ.JYTZ) ; -- -- ------------------------------------------------------------------------------------------------- -- 内部资金拆借利息 --本年累计 SELECT NVL (SUM (t.iyjmoney), 0) INTO t_qxmyjlxtz.cjbnlj --累计利息(应计利息) FROM t_hig_borrow_jx t WHERE t.cstatus = y AND t.cprojectcode = t_qxmyjlxtz.cprojectcode --项目名称和编码匹配 AND fn_date (y, t.djxenddate, v_date) = 1 AND t.csxtypecode = zjsx.cj; --内部资金拆借 --本月累计 SELECT NVL (SUM (t.iyjmoney), 0) INTO t_qxmyjlxtz.cjbylj --累计利息(应计利息) FROM t_hig_borrow_jx t WHERE t.cstatus = y AND t.cprojectcode = t_qxmyjlxtz.cprojectcode --项目名称和编码匹配 AND fn_date ('M', t.djxenddate, v_date) = 1 AND t.csxtypecode = zjsx.cj; --内部资金拆借 -- ------------------------------------------------------------------------------------------------- t_qxmyjlxtz.gdyjlxys := 0; -- ①股东投入应计利息 TODO --应计利息预算A' -- SELECT -- NVL(SUM(T.IYJBUDGET), 0) -- INTO -- T_QXMYJLXTZ.GDYJLXYS --应计利息预算 -- FROM -- T_HIG_RZBUDGET T -- WHERE -- T.CSTATUS =Y -- AND T.CPROJECTCODE = T_QXMYJLXTZ.CPROJECTCODE --项目名称和编码匹配 -- AND T.CSXTYPECODE = ZJSX.GD; --资金属性名称 --累计应计利息① SELECT NVL (SUM (t.iyjmoney), 0) INTO t_qxmyjlxtz.gdljyjlx --累计利息(应计利息) FROM t_hig_borrow_jx t WHERE t.cstatus = y AND t.cprojectcode = t_qxmyjlxtz.cprojectcode --项目名称和编码匹配 AND t.csxtypecode = zjsx.gd AND fn_date ('JD', t.djxenddate, v_date) = 1; --本年预算 SELECT NVL (SUM (t.iyjbudget), 0) INTO t_qxmyjlxtz.gdbnys --应计利息预算 FROM t_hig_rzbudget t WHERE t.cstatus = y AND t.cprojectcode = t_qxmyjlxtz.cprojectcode --项目名称和编码匹配 AND t.iyear = p_bennian AND t.csxtypecode = zjsx.gd; --资金属性名称 --本年实际 SELECT NVL (SUM (t.iyjmoney), 0) INTO t_qxmyjlxtz.gdbnsj --本年实际(应计利息) FROM t_hig_borrow_jx t WHERE t.cstatus = y AND t.cprojectcode = t_qxmyjlxtz.cprojectcode --项目名称和编码匹配 AND fn_date (y, t.djxenddate, v_date) = 1 AND t.csxtypecode = zjsx.gd; --本年差 t_qxmyjlxtz.gdbnc := NVL (t_qxmyjlxtz.gdbnys, 0) - NVL (t_qxmyjlxtz.gdbnsj, 0); --本月预算 SELECT NVL (SUM (t.iyjbudget), 0) INTO t_qxmyjlxtz.gdbyys --应计利息预算 FROM t_hig_rzbudget t WHERE t.cstatus = y AND t.cprojectcode = t_qxmyjlxtz.cprojectcode --项目名称和编码匹配 AND t.iyear = p_bennian AND t.imonth = p_benyue AND t.csxtypecode = zjsx.gd; --资金属性名称 --本月实际 SELECT NVL (SUM (t.iyjmoney), 0) INTO t_qxmyjlxtz.gdbysj --本月实际(应计利息) FROM t_hig_borrow_jx t WHERE t.cstatus = y AND t.cprojectcode = t_qxmyjlxtz.cprojectcode --项目名称和编码匹配 AND fn_date ('M', t.djxenddate, v_date) = 1 AND t.csxtypecode = zjsx.gd; --本月差 t_qxmyjlxtz.gdbyc := NVL (t_qxmyjlxtz.gdbyys, 0) - NVL (t_qxmyjlxtz.gdbysj, 0); -- ------------------------------------------------------------------------------------------------- -- TODO -- ②开发贷应计利息 --应计利息预算A' t_qxmyjlxtz.gdyjlxys := 0; -- SELECT -- NVL(SUM(T.IYJBUDGET), 0) -- INTO -- T_QXMYJLXTZ.KFYJLXYS --应计利息预算 -- FROM -- T_HIG_RZBUDGET T -- WHERE -- T.CSTATUS =Y -- AND T.CPROJECTCODE = T_QXMYJLXTZ.CPROJECTCODE --项目名称和编码匹配 -- AND T.CSXTYPECODE = ZJSX.KF; --资金属性名称 --累计应计利息① SELECT NVL (SUM (t.iyjmoney), 0) INTO t_qxmyjlxtz.kfljyjlx --累计利息(应计利息) FROM t_hig_borrow_jx t WHERE t.cstatus = y AND t.cprojectcode = t_qxmyjlxtz.cprojectcode --项目名称和编码匹配 AND t.csxtypecode = zjsx.kf AND fn_date ('JD', t.djxenddate, v_date) = 1; --本年预算 SELECT NVL (SUM (t.iyjbudget), 0) INTO t_qxmyjlxtz.kfbnys --应计利息预算 FROM t_hig_rzbudget t WHERE t.cstatus = y AND t.cprojectcode = t_qxmyjlxtz.cprojectcode --项目名称和编码匹配 AND t.iyear = p_bennian AND t.csxtypecode = zjsx.kf; --资金属性名称 --本年实际 SELECT NVL (SUM (t.iyjmoney), 0) INTO t_qxmyjlxtz.kfbnsj --本年实际(应计利息) FROM t_hig_borrow_jx t WHERE t.cstatus = y AND t.cprojectcode = t_qxmyjlxtz.cprojectcode --项目名称和编码匹配 AND fn_date (y, t.djxenddate, v_date) = 1 AND t.csxtypecode = zjsx.kf; --本年差 t_qxmyjlxtz.kfbnc := NVL (t_qxmyjlxtz.kfbnys, 0) - NVL (t_qxmyjlxtz.kfbnsj, 0); --本月预算 SELECT NVL (SUM (t.iyjbudget), 0) INTO t_qxmyjlxtz.kfbyys --应计利息预算 FROM t_hig_rzbudget t WHERE t.cstatus = y AND t.cprojectcode = t_qxmyjlxtz.cprojectcode --项目名称和编码匹配 AND t.iyear = p_bennian AND t.imonth = p_benyue AND t.csxtypecode = zjsx.kf; --资金属性名称 --本月实际 SELECT NVL (SUM (t.iyjmoney), 0) INTO t_qxmyjlxtz.kfbysj --本月实际(应计利息) FROM t_hig_borrow_jx t WHERE t.cstatus = y AND t.cprojectcode = t_qxmyjlxtz.cprojectcode --项目名称和编码匹配 AND fn_date ('M', t.djxenddate, v_date) = 1 AND t.csxtypecode = zjsx.kf; --本月差 t_qxmyjlxtz.kfbyc := NVL (t_qxmyjlxtz.kfbyys, 0) - NVL (t_qxmyjlxtz.kfbysj, 0); -- --------------------------------------------------------------------------------------------------- -- 合计 --E2E资金成本利息总额动态预算A=A'+A'' TODO t_qxmyjlxtz.hjzjcblxzdtys := NVL (t_qxmyjlxtz.gdyjlxys, 0) + NVL (t_qxmyjlxtz.kfyjlxys, 0); --累计应计利息C=①+② t_qxmyjlxtz.hjljyjlx := NVL (t_qxmyjlxtz.gdljyjlx, 0) + NVL (t_qxmyjlxtz.kfljyjlx, 0); --本年预算 t_qxmyjlxtz.hjbnys := NVL (t_qxmyjlxtz.gdbnys, 0) + NVL (t_qxmyjlxtz.kfbnys, 0); --本年实际 t_qxmyjlxtz.hjbnsj := NVL (t_qxmyjlxtz.gdbnsj, 0) + NVL (t_qxmyjlxtz.kfbnsj, 0); --本年差 t_qxmyjlxtz.hjbnc := NVL (t_qxmyjlxtz.gdbnc, 0) + NVL (t_qxmyjlxtz.kfbnc, 0); --本月预算 t_qxmyjlxtz.hjbyys := NVL (t_qxmyjlxtz.gdbyys, 0) + NVL (t_qxmyjlxtz.kfbyys, 0); --本月实际 t_qxmyjlxtz.hjbysj := NVL (t_qxmyjlxtz.gdbysj, 0) + NVL (t_qxmyjlxtz.kfbysj, 0); --本月差 t_qxmyjlxtz.hjbyc := NVL (t_qxmyjlxtz.gdbyc, 0) + NVL (t_qxmyjlxtz.kfbyc, 0); /* 插入数据 */ INSERT INTO t_hig_borrow_qxmyjlxtz_his (cprojectname, jytz, hjzjcblxzdtys, hjljyjlx, hjbnys, hjbnsj, hjbnc, hjbyys, hjbysj, hjbyc, cjbnlj, cjbylj, gdyjlxys, gdljyjlx, gdbnys, gdbnsj, gdbnc, gdbyys, gdbysj, gdbyc, kfyjlxys, kfljyjlx, kfbnys, kfbnsj, kfbnc, kfbyys, kfbysj, kfbyc, cdate, iorder, cprojectcode, cprojectnamefmt, cstatus) VALUES (t_qxmyjlxtz.cprojectname, t_qxmyjlxtz.jytz, t_qxmyjlxtz.hjzjcblxzdtys, t_qxmyjlxtz.hjljyjlx, t_qxmyjlxtz.hjbnys, t_qxmyjlxtz.hjbnsj, t_qxmyjlxtz.hjbnc, t_qxmyjlxtz.hjbyys, t_qxmyjlxtz.hjbysj, t_qxmyjlxtz.hjbyc, t_qxmyjlxtz.cjbnlj, t_qxmyjlxtz.cjbylj, t_qxmyjlxtz.gdyjlxys, t_qxmyjlxtz.gdljyjlx, t_qxmyjlxtz.gdbnys, t_qxmyjlxtz.gdbnsj, t_qxmyjlxtz.gdbnc, t_qxmyjlxtz.gdbyys, t_qxmyjlxtz.gdbysj, t_qxmyjlxtz.gdbyc, t_qxmyjlxtz.kfyjlxys, t_qxmyjlxtz.kfljyjlx, t_qxmyjlxtz.kfbnys, t_qxmyjlxtz.kfbnsj, t_qxmyjlxtz.kfbnc, t_qxmyjlxtz.kfbyys, t_qxmyjlxtz.kfbysj, t_qxmyjlxtz.kfbyc, v_date, t_qxmyjlxtz.iorder, t_qxmyjlxtz.cprojectcode, t_qxmyjlxtz.cprojectnamefmt, t_qxmyjlxtz.cstatus); END LOOP; -- SYS.DBMS_OUTPUT.PUT_LINE('INFO:总共查询了'||CUR_SZPROJECT%ROWCOUNT||'个项目!') ; CLOSE cur_szproject; COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; RAISE; END p_hig_borrow_qxmyjlxtz2; -------------------------------------------------------- -- DDL for Procedure P_HIG_BORROW_QXMYJLXTZ -------------------------------------------------------- PROCEDURE p_hig_borrow_qxmyjlxtz (v_date IN DATE) --截止日期 IS /* 全项目应计利息台账 yinbin 四种方式 4 */ BEGIN /* 插入数据 */ INSERT INTO t_hig_borrow_qxmyjlxtz_his (cprojectcode, cprojectname, jytz, iorder, cprojectnamefmt, cstatus, cjbnlj, cjbylj, gdyjlxys, gdljyjlx, gdbnys, gdbnsj, gdbnc, gdbyys, gdbysj, gdbyc, kfyjlxys, kfljyjlx, kfbnys, kfbnsj, kfbnc, kfbyys, kfbysj, kfbyc, hjzjcblxzdtys, hjljyjlx, hjbnys, hjbnsj, hjbnc, hjbyys, hjbysj, hjbyc, cdate) WITH yz_jxje AS ( SELECT cprojectcode, csxtypecode, 'M' AS year_month, SUM (iyjmoney) AS jxje FROM t_hig_borrow_jx WHERE cstatus = 'Y' AND hig_report_borrow.fn_date ('M', djxenddate, v_date) = 1 GROUP BY cprojectcode, csxtypecode UNION ALL SELECT cprojectcode, csxtypecode, 'Y' AS year_month, SUM (iyjmoney) AS jxje FROM t_hig_borrow_jx WHERE cstatus = 'Y' AND hig_report_borrow.fn_date ('Y', djxenddate, v_date) = 1 GROUP BY cprojectcode, csxtypecode UNION ALL SELECT cprojectcode, csxtypecode, 'JD' AS year_month, NVL (SUM (iyjmoney), 0) AS jxje FROM t_hig_borrow_jx WHERE cstatus = 'Y' AND hig_report_borrow.fn_date ('JD', djxenddate, v_date) = 1 GROUP BY cprojectcode, csxtypecode), yz_yjlxys AS ( SELECT t.cprojectcode, t.csxtypecode, 'Y' AS year_month, NVL (SUM (t.iyjbudget), 0) AS yjlxys FROM t_hig_rzbudget t WHERE t.cstatus = 'Y' AND t.iyear = EXTRACT (YEAR FROM v_date) GROUP BY t.cprojectcode, t.csxtypecode UNION ALL SELECT t.cprojectcode, t.csxtypecode, 'M' AS year_month, NVL (SUM (t.iyjbudget), 0) AS yjlxys FROM t_hig_rzbudget t WHERE t.cstatus = 'Y' AND t.iyear = EXTRACT (YEAR FROM v_date) AND t.imonth = EXTRACT (MONTH FROM v_date) GROUP BY t.cprojectcode, t.csxtypecode), nofmt AS (SELECT cyhcode AS cprojectcode, cyhname AS cprojectname, cxmjytz AS jytz, iorder AS iorder, cprojectname AS cprojectnamefmt, cstatus AS cstatus, cjbnlj, cjbylj, gdyjlxys, gdljyjlx, gdbnys, gdbnsj, gdbnc, gdbyys, gdbysj, gdbyc, kfyjlxys, kfljyjlx, kfbnys, kfbnsj, kfbnc, kfbyys, kfbysj, kfbyc, hjzjcblxzdtys, hjljyjlx, hjbnys, hjbnsj, hjbnc, hjbyys, hjbysj, hjbyc FROM t_hig_szproject MODEL RETURN ALL ROWS REFERENCE ref_jxje ON (SELECT * FROM yz_jxje) DIMENSION BY (cprojectcode, csxtypecode, year_month) MEASURES (jxje) REFERENCE ref_yjlxys ON (SELECT * FROM yz_yjlxys) DIMENSION BY (cprojectcode, csxtypecode, year_month) MEASURES (yjlxys) MAIN main_section DIMENSION BY (cyhcode) MEASURES (cyhname, cxmjytz, cprojectname, cstatus, iorder, 0 cjbnlj, 0 cjbylj, 0 gdljyjlx, 0 gdbnys, 0 gdbnsj, 0 gdbnc, 0 gdbyys, 0 gdbysj, 0 gdbyc, 0 kfljyjlx, 0 kfbnys, 0 kfbnsj, 0 kfbnc, 0 kfbyys, 0 kfbysj, 0 kfbyc, 0 gdyjlxys, 0 kfyjlxys, 0 hjzjcblxzdtys, 0 hjljyjlx, 0 hjbnys, 0 hjbnsj, 0 hjbnc, 0 hjbyys, 0 hjbysj, 0 hjbyc) IGNORE NAV UNIQUE DIMENSION RULES AUTOMATIC ORDER (cjbnlj [cyhcode] = ref_jxje.jxje[CV (cyhcode), 'CJ', 'Y'], --内部资金拆借利息 本年累计 cjbylj [cyhcode] = ref_jxje.jxje[CV (cyhcode), 'CJ', 'M'], --内部资金拆借利息 本年累计 gdyjlxys [cyhcode] = 0, --股东 应计利息预算A' todo gdljyjlx [cyhcode] = ref_jxje.jxje[CV (cyhcode), 'GD', 'JD'], --①股东投入应计利息 累计应计利息① gdbnys [cyhcode] = ref_yjlxys.yjlxys[CV (cyhcode), 'GD', 'Y'], --本年 预算 gdbnsj [cyhcode] = ref_jxje.jxje[CV (cyhcode), 'GD', 'Y'], --本年 实际 gdbnc [cyhcode] = NVL (gdbnys[CV (cyhcode)], 0) - NVL (gdbnsj[CV (cyhcode)], 0), --本年 差 gdbyys [cyhcode] = ref_yjlxys.yjlxys[CV (cyhcode), 'GD', 'M'], --本月 预算 gdbysj [cyhcode] = ref_jxje.jxje[CV (cyhcode), 'GD', 'M'], --本月 实际 gdbyc [cyhcode] = NVL (gdbyys[CV (cyhcode)], 0) - NVL (gdbysj[CV (cyhcode)], 0), --本月 差 kfyjlxys [cyhcode] = 0, --开发 应计利息预算A' todo kfljyjlx [cyhcode] = ref_jxje.jxje[CV (cyhcode), 'KF', 'JD'], --②开发贷应计利息 "累计应计利息②" kfbnys [cyhcode] = ref_yjlxys.yjlxys[CV (cyhcode), 'KF', 'Y'], --本年 预算 kfbnsj [cyhcode] = ref_jxje.jxje[CV (cyhcode), 'KF', 'Y'], --本年 实际 kfbnc [cyhcode] = NVL (kfbnys[CV (cyhcode)], 0) - NVL (kfbnsj[CV (cyhcode)], 0), --本年 差 kfbyys [cyhcode] = ref_yjlxys.yjlxys[CV (cyhcode), 'KF', 'M'], --本月 预算 kfbysj [cyhcode] = ref_jxje.jxje[CV (cyhcode), 'KF', 'M'], --本月 实际 kfbyc [cyhcode] = NVL (kfbyys[CV (cyhcode)], 0) - NVL (kfbysj[CV (cyhcode)], 0), --本月 差 hjzjcblxzdtys [cyhcode] = NVL (gdyjlxys[CV (cyhcode)], 0) + NVL (kfyjlxys[CV (cyhcode)], 0), hjljyjlx [cyhcode] = NVL (gdljyjlx[CV (cyhcode)], 0) + NVL (kfljyjlx[CV (cyhcode)], 0), --累计应计利息C=①+② hjbnys [cyhcode] = NVL (gdbnys[CV (cyhcode)], 0) + NVL (kfbnys[CV (cyhcode)], 0), --本年预算 hjbnsj [cyhcode] = NVL (gdbnsj[CV (cyhcode)], 0) + NVL (kfbnsj[CV (cyhcode)], 0), --本年实际 hjbnc [cyhcode] = NVL (gdbnc[CV (cyhcode)], 0) + NVL (kfbnc[CV (cyhcode)], 0), --本年差 hjbyys [cyhcode] = NVL (gdbyys[CV (cyhcode)], 0) + NVL (kfbyys[CV (cyhcode)], 0), --本月预算 hjbysj [cyhcode] = NVL (gdbysj[CV (cyhcode)], 0) + NVL (kfbysj[CV (cyhcode)], 0), --本月实际 hjbyc [cyhcode] = NVL (gdbyc[CV (cyhcode)], 0) + NVL (kfbyc[CV (cyhcode)], 0) --本月差 )) SELECT cprojectcode, cprojectname, jytz, iorder, cprojectnamefmt, cstatus, cjbnlj, cjbylj, gdyjlxys, gdljyjlx, gdbnys, gdbnsj, gdbnc, gdbyys, gdbysj, gdbyc, kfyjlxys, kfljyjlx, kfbnys, kfbnsj, kfbnc, kfbyys, kfbysj, kfbyc, hjzjcblxzdtys, hjljyjlx, hjbnys, hjbnsj, hjbnc, hjbyys, hjbysj, hjbyc, v_date FROM nofmt t; COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; RAISE; END p_hig_borrow_qxmyjlxtz; -------------------------------------------------------- -- DDL for Procedure P_HIG_BORROW_QXMZJDKTZ -------------------------------------------------------- PROCEDURE p_hig_borrow_qxmzjdktz (v_date IN DATE) --截止日期 /* 1.全项目融资台账 yinbin 四种方式 1 */ IS --temp表的每行的类型 t_qxmzjdktz t_hig_borrow_qxmzjdktz_his%ROWTYPE; -- 游标 查询项目名称 todo 可能会根据业务进行修改 CURSOR cur_szproject (cv_bflag NUMBER) --合法的数据 IS SELECT t.cyhcode, --项目编码 t.cyhname, --项目名称 t.cprojectname, --格式化后的项目名称 t.cxmjytz, --经营体长 t.iorder, --排序 t.cstatus --是否是项目 FROM t_hig_szproject t WHERE t.bflag = cv_bflag; --本年 需要改为 sysdate '2012-03-07' p_bennian NUMBER := EXTRACT (YEAR FROM v_date); --本月 需要改为 sysdate p_benyue NUMBER := EXTRACT (MONTH FROM v_date); -- 表类型 方便插入数据 -- TYPE TYPE_QXMZJDKTZ IS TABLE OF T_HIG_BORROW_QXMZJDKTZ_HIS%ROWTYPE; BEGIN /* 验证 */ IF v_date IS NULL THEN -- SYS.DBMS_OUTPUT.PUT_LINE('v_date不能为null'); RETURN; END IF; /* 循环每一个总项目 */ OPEN cur_szproject (0); IF cur_szproject%NOTFOUND THEN -- SYS.DBMS_OUTPUT.PUT_LINE('警告:根据您输入的参数无法查出任何数据!EXITED'); RETURN; END IF; LOOP --取出 项目名称、经营体长 FETCH cur_szproject INTO t_qxmzjdktz.cprojectcode, t_qxmzjdktz.cprojectname, t_qxmzjdktz.cprojectnamefmt, t_qxmzjdktz.jytz, t_qxmzjdktz.iorder, t_qxmzjdktz.cstatus; EXIT WHEN cur_szproject%NOTFOUND; --贷款预算 说明:取项目全周期贷款预算,全周期即所有的,所以没有时间判断 SELECT NVL (SUM (NVL (t.idkbudget, 0)), 0) INTO t_qxmzjdktz.dkys FROM t_hig_rzqzqbudget t WHERE t.cstatus = y AND t.cprojectcode = t_qxmzjdktz.cprojectcode; --项目对应 /************************************************************************** **************************************** 1、股东借款 *************************************************************************** ***************************************/ ------------------------------------------------------------------------------------------------------------ -- 年 SELECT NVL (SUM (NVL (t.idkbudget, 0)), 0), NVL (SUM (NVL (t.ihkbudget, 0)), 0) INTO t_qxmzjdktz.gdbnysjk, --本年预算借款 t_qxmzjdktz.gdbnyshk --本年预算还款 FROM t_hig_rzbudget t WHERE t.cstatus = y AND t.cprojectcode = t_qxmzjdktz.cprojectcode --项目名称对应 AND t.iyear = p_bennian --本年(预算创建日期) AND t.csxtypecode = zjsx.gd; --本年实际借款 SELECT NVL (SUM (NVL (t.idkmoney, 0)), 0) INTO t_qxmzjdktz.gdbnsjjk FROM t_hig_borrow_dk t WHERE t.cstatus = y AND t.cprojectcode = t_qxmzjdktz.cprojectcode --项目名称对应 AND fn_date (y, t.ddkbegindate, v_date) = 1 AND t.csxtypecode = zjsx.gd; --本年实际还款 SELECT NVL (SUM (NVL (t.ihkmoney, 0)), 0) INTO t_qxmzjdktz.gdbnsjhk FROM t_hig_borrow_hk t WHERE t.cstatus = y AND t.cprojectcode = t_qxmzjdktz.cprojectcode --项目名称对应 AND fn_date (y, t.dhkdate, v_date) = 1 AND t.csxtypecode = zjsx.gd; --本年差借款 t_qxmzjdktz.gdbncjk := (NVL (t_qxmzjdktz.gdbnysjk, 0) - NVL (t_qxmzjdktz.gdbnsjjk, 0)); --本年差还款 t_qxmzjdktz.gdbnchk := (NVL (t_qxmzjdktz.gdbnyshk, 0) - NVL (t_qxmzjdktz.gdbnsjhk, 0)); ------------------------------------------------------------------------------------------------------------ -- 月 SELECT NVL (SUM (NVL (t.idkbudget, 0)), 0), NVL (SUM (NVL (t.ihkbudget, 0)), 0) INTO t_qxmzjdktz.gdbyysjk, --本月预算借款 t_qxmzjdktz.gdbyyshk --本月预算还款 FROM t_hig_rzbudget t WHERE t.cstatus = y AND t.cprojectcode = t_qxmzjdktz.cprojectcode --项目名称对应 AND t.iyear = p_bennian --本年(预算创建日期) AND t.imonth = p_benyue --本月 AND t.csxtypecode = zjsx.gd; --本月实际借款 SELECT NVL (SUM (NVL (t.idkmoney, 0)), 0) INTO t_qxmzjdktz.gdbysjjk FROM t_hig_borrow_dk t WHERE t.cstatus = y AND t.cprojectcode = t_qxmzjdktz.cprojectcode --项目名称对应 AND fn_date ('M', t.ddkbegindate, v_date) = 1 AND t.csxtypecode = zjsx.gd; -- -- 股东借款和开发贷款合计 --本月实际还款 SELECT NVL (SUM (NVL (t.ihkmoney, 0)), 0) INTO t_qxmzjdktz.gdbysjhk FROM t_hig_borrow_hk t WHERE t.cstatus = y AND t.cprojectcode = t_qxmzjdktz.cprojectcode --项目名称对应 AND fn_date ('M', t.dhkdate, v_date) = 1 AND t.csxtypecode = zjsx.gd; --股东借款和开发贷款合计 --本月差借款 t_qxmzjdktz.gdbycjk := (NVL (t_qxmzjdktz.gdbnysjk, 0) - NVL (t_qxmzjdktz.gdbnsjjk, 0)); --本月差还款 t_qxmzjdktz.gdbychk := (NVL (t_qxmzjdktz.gdbnyshk, 0) - NVL (t_qxmzjdktz.gdbnsjhk, 0)); ---年初余额 TODO 导入的固定数据,到项目/分期/到资金属性存储。可能需要在dk表中添加年初余额字段 t_qxmzjdktz.gdncye := 200000; -- SELECT SUM(T.NCYE) INTO T_QXMZJDKTZ.GDNCYE FROM T_HIG_RZBUDGET T -- WHERE T. ---期末余额 /*年初余额+本年累计到当前月的贷款金额-本年累计到当前月的还款款金额*/ t_qxmzjdktz.gdqmye := NVL (t_qxmzjdktz.gdncye, 0) + NVL (t_qxmzjdktz.gdbnsjjk, 0) - NVL (t_qxmzjdktz.gdbnsjhk, 0); /************************************************************************** **************************************** 2、开发贷款 *************************************************************************** ***************************************/ ------------------------------------------------------------------------------------------------------------ -- 年 SELECT NVL (SUM (NVL (t.idkbudget, 0)), 0), NVL (SUM (NVL (t.ihkbudget, 0)), 0) INTO t_qxmzjdktz.kfbnysjk, --本年预算借款 t_qxmzjdktz.kfbnyshk --本年预算还款 FROM t_hig_rzbudget t WHERE t.cstatus = y AND t.cprojectcode = t_qxmzjdktz.cprojectcode --项目名称对应 AND t.iyear = p_bennian --本年(预算创建日期) AND t.csxtypecode = zjsx.kf; --本年实际借款 SELECT NVL (SUM (NVL (t.idkmoney, 0)), 0) INTO t_qxmzjdktz.kfbnsjjk FROM t_hig_borrow_dk t WHERE t.cstatus = y AND t.cprojectcode = t_qxmzjdktz.cprojectcode --项目名称对应 AND fn_date (y, t.ddkbegindate, v_date) = 1 AND t.csxtypecode = zjsx.kf; -- -- 股东借款和开发贷款合计 --本年实际还款 SELECT NVL (SUM (NVL (t.ihkmoney, 0)), 0) INTO t_qxmzjdktz.kfbnsjhk FROM t_hig_borrow_hk t WHERE t.cstatus = y AND t.cprojectcode = t_qxmzjdktz.cprojectcode --项目名称对应 AND fn_date (y, t.dhkdate, v_date) = 1 AND t.csxtypecode = zjsx.kf; --股东借款和开发贷款合计 --本年差借款 t_qxmzjdktz.kfbncjk := (NVL (t_qxmzjdktz.kfbnysjk, 0) - NVL (t_qxmzjdktz.kfbnsjjk, 0)); --本年差还款 t_qxmzjdktz.kfbnchk := (NVL (t_qxmzjdktz.kfbnyshk, 0) - NVL (t_qxmzjdktz.kfbnsjhk, 0)); ------------------------------------------------------------------------------------------------------------ -- 月 SELECT NVL (SUM (NVL (t.idkbudget, 0)), 0), NVL (SUM (NVL (t.ihkbudget, 0)), 0) INTO t_qxmzjdktz.kfbyysjk, --本月预算借款 t_qxmzjdktz.kfbyyshk --本月预算还款 FROM t_hig_rzbudget t WHERE t.cstatus = y AND t.cprojectcode = t_qxmzjdktz.cprojectcode --项目名称对应 AND t.iyear = p_bennian --本年(预算创建日期) AND t.imonth = p_benyue --本月 AND t.csxtypecode = zjsx.kf; --本月实际借款 SELECT NVL (SUM (NVL (t.idkmoney, 0)), 0) INTO t_qxmzjdktz.kfbysjjk FROM t_hig_borrow_dk t WHERE t.cstatus = y AND t.cprojectcode = t_qxmzjdktz.cprojectcode --项目名称对应 AND fn_date ('M', t.ddkbegindate, v_date) = 1 AND t.csxtypecode = zjsx.kf; --股东借款和开发贷款合计 --本月实际还款 SELECT NVL (SUM (NVL (t.ihkmoney, 0)), 0) INTO t_qxmzjdktz.kfbysjhk FROM t_hig_borrow_hk t WHERE t.cstatus = y AND t.cprojectcode = t_qxmzjdktz.cprojectcode --项目名称对应 AND fn_date ('M', t.dhkdate, v_date) = 1 AND t.csxtypecode = zjsx.kf; --股东借款和开发贷款合计 --本月差借款 t_qxmzjdktz.kfbycjk := (NVL (t_qxmzjdktz.kfbnysjk, 0) - NVL (t_qxmzjdktz.kfbnsjjk, 0)); --本月差还款 t_qxmzjdktz.kfbychk := (NVL (t_qxmzjdktz.kfbnyshk, 0) - NVL (t_qxmzjdktz.kfbnsjhk, 0)); ---年初余额 TODO 导入的固定数据 t_qxmzjdktz.kfncye := 100000; ---期末余额 /*年初余额+本年累计到当前月的贷款金额-本年累计到当前月的还款款金额*/ t_qxmzjdktz.kfqmye := NVL (t_qxmzjdktz.kfncye, 0) + NVL (t_qxmzjdktz.kfbysjjk, 0) - NVL (t_qxmzjdktz.kfbysjhk, 0); /************************************************************************** **************************************** 3、HIG内部资金拆借 *************************************************************************** ***************************************/ --本年累计借款 SELECT NVL (SUM (NVL (t.idkmoney, 0)), 0) INTO t_qxmzjdktz.nbbnljjk FROM t_hig_borrow_dk t WHERE t.cstatus = y AND t.cprojectcode = t_qxmzjdktz.cprojectcode --项目名称对应 AND fn_date (y, t.ddkbegindate, v_date) = 1 -- 本年(贷款起始日期) AND t.csxtypecode = zjsx.cj; --HIG内部资金拆借 --本年累计还款 SELECT NVL (SUM (NVL (t.ihkmoney, 0)), 0) INTO t_qxmzjdktz.nbbnjhk FROM t_hig_borrow_hk t WHERE t.cstatus = y AND t.cprojectcode = t_qxmzjdktz.cprojectcode --项目名称对应 AND fn_date (y, t.dhkdate, v_date) = 1 AND t.csxtypecode = zjsx.cj; --HIG内部资金拆借 --本月实际借款 SELECT NVL (SUM (NVL (t.idkmoney, 0)), 0) INTO t_qxmzjdktz.nbbysjjk FROM t_hig_borrow_dk t WHERE t.cstatus = y AND t.cprojectcode = t_qxmzjdktz.cprojectcode --项目名称对应 AND fn_date ('M', t.ddkbegindate, v_date) = 1 AND t.csxtypecode = zjsx.cj; -- -- HIG内部资金拆借 --本月实际还款 SELECT NVL (SUM (NVL (t.idkmoney, 0)), 0) INTO t_qxmzjdktz.nbbysjhk FROM t_hig_borrow_hk t WHERE t.cstatus = y AND t.cprojectcode = t_qxmzjdktz.cprojectcode --项目名称对应 AND fn_date ('M', t.dhkdate, v_date) = 1 AND t.csxtypecode = zjsx.cj; --HIG内部资金拆借 --年初余额 TODO 导入的固定数据 t_qxmzjdktz.nbncye := 300000; --期末余额 /*年初余额+本年累计到当前月的贷款金额-本年累计到当前月的还款款金额*/ t_qxmzjdktz.nbqmye := NVL (t_qxmzjdktz.nbncye, 0) + NVL (t_qxmzjdktz.nbbnljjk, 0) - NVL (t_qxmzjdktz.nbbnjhk, 0); /************************************************************************** **************************************** 4、注册资金 *************************************************************************** ***************************************/ --注册资金 TODO 导入的固定数据 t_qxmzjdktz.zczj := 76327685; /************************************************************************** **************************************** 0、合计 *************************************************************************** ***************************************/ --年初余额 t_qxmzjdktz.ncye := NVL (t_qxmzjdktz.gdncye, 0) + NVL (t_qxmzjdktz.kfncye, 0); --期末余额 t_qxmzjdktz.qmye := NVL (t_qxmzjdktz.gdqmye, 0) + NVL (t_qxmzjdktz.kfqmye, 0); ------------------------------------------------------------------------------------------------------------ -- 年 --本年预算借款 t_qxmzjdktz.bnysjk := NVL (t_qxmzjdktz.gdbnysjk, 0) + NVL (t_qxmzjdktz.kfbnysjk, 0); --本年预算还款 t_qxmzjdktz.bnyshk := NVL (t_qxmzjdktz.gdbnyshk, 0) + NVL (t_qxmzjdktz.kfbnyshk, 0); --本年实际借款 t_qxmzjdktz.bnsjjk := NVL (t_qxmzjdktz.gdbnsjjk, 0) + NVL (t_qxmzjdktz.kfbnsjjk, 0); --本年实际还款 t_qxmzjdktz.bnsjhk := NVL (t_qxmzjdktz.gdbnsjhk, 0) + NVL (t_qxmzjdktz.kfbnsjhk, 0); --本年差借款 t_qxmzjdktz.bncjk := NVL (t_qxmzjdktz.gdbncjk, 0) + NVL (t_qxmzjdktz.kfbncjk, 0); --本年差还款 ------------------------------------------------------------------------------------------------------------ -- 月 t_qxmzjdktz.bnchk := NVL (t_qxmzjdktz.gdbnchk, 0) + NVL (t_qxmzjdktz.kfbnchk, 0); --本月预算借款 t_qxmzjdktz.byysjk := NVL (t_qxmzjdktz.gdbyysjk, 0) + NVL (t_qxmzjdktz.kfbyysjk, 0); --本月预算还款 t_qxmzjdktz.byyshk := NVL (t_qxmzjdktz.gdbyyshk, 0) + NVL (t_qxmzjdktz.kfbyyshk, 0); --本月实际借款 t_qxmzjdktz.bysjjk := NVL (t_qxmzjdktz.gdbysjjk, 0) + NVL (t_qxmzjdktz.kfbysjjk, 0); --本月实际还款 t_qxmzjdktz.bysjhk := NVL (t_qxmzjdktz.gdbysjhk, 0) + NVL (t_qxmzjdktz.kfbysjhk, 0); --本月差借款 t_qxmzjdktz.bycjk := NVL (t_qxmzjdktz.gdbycjk, 0) + NVL (t_qxmzjdktz.kfbycjk, 0); --本月差还款 t_qxmzjdktz.bychk := NVL (t_qxmzjdktz.gdbychk, 0) + NVL (t_qxmzjdktz.kfbychk, 0); /************************************************************************** **************************************** 插入临时表 *************************************************************************** ***************************************/ INSERT INTO t_hig_borrow_qxmzjdktz_his (cprojectcode, jytz, dkys, ncye, bnysjk, bnyshk, bnsjjk, bnsjhk, bncjk, bnchk, byysjk, byyshk, bysjjk, bysjhk, bycjk, bychk, qmye, gdncye, gdbnysjk, gdbnyshk, gdbnsjjk, gdbnsjhk, gdbncjk, gdbnchk, gdbyysjk, gdbyyshk, gdbysjjk, gdbysjhk, gdbycjk, gdbychk, gdqmye, kfncye, kfbnysjk, kfbnyshk, kfbnsjjk, kfbnsjhk, kfbncjk, kfbnchk, kfbyysjk, kfbyyshk, kfbysjjk, kfbysjhk, kfbycjk, kfbychk, kfqmye, nbncye, nbbnljjk, nbbnjhk, nbbysjjk, nbbysjhk, nbqmye, zczj, cdate, cprojectname, cprojectnamefmt, iorder, cstatus) VALUES (t_qxmzjdktz.cprojectcode, t_qxmzjdktz.jytz, t_qxmzjdktz.dkys, t_qxmzjdktz.ncye, t_qxmzjdktz.bnysjk, t_qxmzjdktz.bnyshk, t_qxmzjdktz.bnsjjk, t_qxmzjdktz.bnsjhk, t_qxmzjdktz.bncjk, t_qxmzjdktz.bnchk, t_qxmzjdktz.byysjk, t_qxmzjdktz.byyshk, t_qxmzjdktz.bysjjk, t_qxmzjdktz.bysjhk, t_qxmzjdktz.bycjk, t_qxmzjdktz.bychk, t_qxmzjdktz.qmye, t_qxmzjdktz.gdncye, t_qxmzjdktz.gdbnysjk, t_qxmzjdktz.gdbnyshk, t_qxmzjdktz.gdbnsjjk, t_qxmzjdktz.gdbnsjhk, t_qxmzjdktz.gdbncjk, t_qxmzjdktz.gdbnchk, t_qxmzjdktz.gdbyysjk, t_qxmzjdktz.gdbyyshk, t_qxmzjdktz.gdbysjjk, t_qxmzjdktz.gdbysjhk, t_qxmzjdktz.gdbycjk, t_qxmzjdktz.gdbychk, t_qxmzjdktz.gdqmye, t_qxmzjdktz.kfncye, t_qxmzjdktz.kfbnysjk, t_qxmzjdktz.kfbnyshk, t_qxmzjdktz.kfbnsjjk, t_qxmzjdktz.kfbnsjhk, t_qxmzjdktz.kfbncjk, t_qxmzjdktz.kfbnchk, t_qxmzjdktz.kfbyysjk, t_qxmzjdktz.kfbyyshk, t_qxmzjdktz.kfbysjjk, t_qxmzjdktz.kfbysjhk, t_qxmzjdktz.kfbycjk, t_qxmzjdktz.kfbychk, t_qxmzjdktz.kfqmye, t_qxmzjdktz.nbncye, t_qxmzjdktz.nbbnljjk, t_qxmzjdktz.nbbnjhk, t_qxmzjdktz.nbbysjjk, t_qxmzjdktz.nbbysjhk, t_qxmzjdktz.nbqmye, t_qxmzjdktz.zczj, v_date, t_qxmzjdktz.cprojectname, t_qxmzjdktz.cprojectnamefmt, t_qxmzjdktz.iorder, t_qxmzjdktz.cstatus); END LOOP; CLOSE cur_szproject; COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; RAISE; END p_hig_borrow_qxmzjdktz; -------------------------------------------------------- -- DDL for Procedure P_HIG_BORROW_DXMYFLXTZ_DK -------------------------------------------------------- PROCEDURE p_hig_borrow_dxmyflxtz_dk (v_date IN DATE, v_cprojectcode IN VARCHAR2, --项目编码 v_cprojectname IN VARCHAR2 --项目名称 ) --截止日期 AS /* 单项目应付利息台账-到单据 YINBIN */ BEGIN -- INSERT INTO t_hig_borrow_dxmyflxtz_dk_his (dkdh, fq, zjsx, zjly, dkzje, yingflx, yiflx, weiflx, cprojectcode, cprojectname, iorder, fqcode) WITH dk AS (SELECT s.cprojectcode, --项目编码 s.cprojectname, --项目名称 s.cdocument, --贷款单号 f.cinstallmentname, --分期名称 s.csxtypecode, --资金属性编码 s.csxtypename, --资金属性 s.czjfroms, --资金来源 s.idkmoney, --贷款总金额 f.iorder, --分期排序 f.cinstallmentcode --分期编码 FROM t_hig_borrow_dk s LEFT JOIN t_hig_szinstallment f ON s.cinstallmentcode = f.cinstallmentcode WHERE s.cstatus = y AND s.csxtypecode IN (zjsx.gd, zjsx.kf) --仅仅查询股东投入和开发贷 ), jx AS --股东投入 取应计利息 合计 ( SELECT j.cdkdocument, -- DECODE(J.CINSTALLMENTCODE,ZJSX.GD,NVL(MIN(SUM(J.IYJMONEY)), -- 0),ZJSX.KF,NVL(MIN(SUM(J.IYFMONEY) -- ),0),0) AS YINGFLX --改成计息单 应计利息 -- MIN(CASE WHEN J.CINSTALLMENTCODE = ZJSX.GD THEN -- NVL(SUM(J.IYJMONEY),0) -- ELSE--IF J.CINSTALLMENTCODE = ZJSX.KF WHEN THEN -- NVL(SUM(J.IYFMONEY),0) -- END) AS YINGFLX --改成计息单 应计利息 NVL (SUM (j.iyjmoney), 0) AS yingjlx, --改成计息单 应计利息 NVL (SUM (j.iyfmoney), 0) AS yingflx --改成计息单 应付利息 FROM t_hig_borrow_jx j WHERE j.cstatus = y GROUP BY j.cdkdocument), hx AS ( SELECT h.cdkdocument, NVL (SUM (h.ihxmoney), 0) AS yiflx_kf, --本次付息金额 (kf) ,gd 本次还息金额-应计利息 NVL (SUM (h.ihxmoney - h.iyjmoney), 0) AS yiflx_gd --gd本次付息金额-应计利息 FROM t_hig_borrow_hx h WHERE h.cstatus = y GROUP BY h.cdkdocument), res AS (SELECT d.cprojectcode AS cprojectcode, --项目编码 d.cprojectname AS cprojectname, --项目名称 d.cdocument AS dkdh, --贷款单号 d.cinstallmentname AS fq, --分期名称 d.csxtypename AS zjsx, --资金属性 d.czjfroms AS zjly, --资金来源 d.idkmoney AS dkzje, --贷款总金额 d.iorder AS iorder, --分期排序 DECODE (d.csxtypecode, zjsx.gd, j.yingjlx, zjsx.kf, j.yingflx, 0) AS yingflx, --应付利息 DECODE (d.csxtypecode, zjsx.gd, h.yiflx_gd, zjsx.kf, h.yiflx_kf, 0) AS yiflx, --已付利息 ( NVL (DECODE (d.csxtypecode, zjsx.gd, j.yingjlx, zjsx.kf, j.yingflx, 0), 0) - NVL (DECODE (d.csxtypecode, zjsx.gd, h.yiflx_gd, zjsx.kf, h.yiflx_kf, 0), 0)) AS weiflx, --未付利息 d.cinstallmentcode AS fqcode --分期编码 FROM dk d LEFT JOIN jx j ON d.cdocument = j.cdkdocument LEFT JOIN hx h ON d.cdocument = h.cdkdocument), heji AS ( SELECT r.cprojectcode AS cprojectcode, --项目编码 r.cprojectname AS cprojectname, --项目名称 heji_name AS dkdh, --贷款单号 NULL AS fq, --分期名称 NULL AS zjsx, --资金属性 NULL AS zjly, --资金来源 SUM (r.dkzje) AS dkzje, --贷款总金额 1 AS iorder, --分期排序 SUM (NVL (r.yingflx, 0)) AS yingflx, --应付利息 SUM (NVL (r.yiflx, 0)) AS yiflx, --已付利息 SUM (NVL (r.weiflx, 0)) AS weiflx, --未付利息 NULL AS fqcode --分期编码 FROM res r GROUP BY r.cprojectcode, r.cprojectname /* --如果看到这里的group by 多出一些列,请删除 GROUP BY R.CPROJECTCODE, R.CPROJECTNAME */ ) SELECT dkdh, fq, zjsx, zjly, dkzje, yingflx, yiflx, weiflx, cprojectcode, cprojectname, iorder, fqcode FROM res UNION ALL SELECT dkdh, fq, zjsx, zjly, dkzje, yingflx, yiflx, weiflx, cprojectcode, cprojectname, iorder, fqcode FROM heji; -- COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; RAISE; END p_hig_borrow_dxmyflxtz_dk; -------------------------------------------------------- -- DDL for Procedure P_HIG_BORROW_DXMYJLXTZ -------------------------------------------------------- PROCEDURE p_hig_borrow_dxmyjlxtz (v_cprojectcode IN VARCHAR2, --项目编码 v_cprojectname IN VARCHAR2, --项目名称 v_date IN DATE) --截止日期 AS /* 单项目应计利息台账 YINBIN */ --本年 需要改为 sysdate '2012-03-07' p_bennian NUMBER := EXTRACT (YEAR FROM v_date); --本月 需要改为 sysdate p_benyue NUMBER := EXTRACT (MONTH FROM v_date); --ROW类型 t_dxmyjlxtz t_hig_borrow_dxmyjlxtz_his%ROWTYPE; --游标 循环贷款单主表 CURSOR cur_dk ( cv_cprojectcode VARCHAR2, cv_cprojectname VARCHAR2, cv_date DATE) IS SELECT t.cdocument, --贷款单号 t.cinstallmentname, --分期名称 t.csxtypename, --资金属性 t.czjfroms, --资金来源 NVL (t.idkmoney, 0), --贷款总金额 -- 只有股东借款和开发贷款,才可以有应付利率和应计利率 NVL (t.iyfrate, 0), --应付利率 NVL (t.iyjrate, 0), --应计利率 t.ddkbegindate, --贷款日 t.dhkdate, --还款日 f.iorder --排序 FROM t_hig_borrow_dk t --贷款单表 LEFT JOIN t_hig_szinstallment f --分期字典表 ON f.cinstallmentname = t.cinstallmentname --分期 LEFT JOIN t_hig_szproject s ON s.cyhcode = t.cprojectcode WHERE t.cstatus = y AND s.byzflag = 0 --haier要求只计算这部分数据 AND t.ddkbegindate <= cv_date -- 截止到 贷款日期 AND fn_date ('JD', t.ddkbegindate, cv_date) = 1 AND (t.cprojectcode = cv_cprojectcode OR t.cprojectname = cv_cprojectname); FUNCTION ljyjlx RETURN NUMBER IS tmpvar NUMBER; /****************************************************************************** 累计应计利息 ******************************************************************************/ BEGIN tmpvar := 0; SELECT NVL (SUM (NVL (iyjmoney, 0)), 0) INTO tmpvar --累计应计利息 FROM t_hig_borrow_jx t WHERE t.cstatus = y AND fn_date ('JD', t.djxenddate, v_date) = 1 AND (t.cprojectcode = v_cprojectcode OR t.cprojectname = v_cprojectname) AND t.cdkdocument = t_dxmyjlxtz.cdkdocument --贷款单号 AND t.csxtypecode <> zjsx.cj; --资金属性:内部拆借 RETURN tmpvar; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN RAISE; END ljyjlx; FUNCTION dkye RETURN NUMBER IS tmpvar NUMBER; /****************************************************************************** 贷款余额 ******************************************************************************/ BEGIN tmpvar := 0; SELECT t_dxmyjlxtz.idkmoney - NVL (SUM (NVL (t.ihkmoney, 0)), 0) INTO tmpvar --贷款余额(还款单未还金额的合计) FROM t_hig_borrow_hk t WHERE t.cstatus = y AND fn_date ('JD', t.dhkdate, v_date) = 1 AND (t.cprojectcode = v_cprojectcode OR t.cprojectname = v_cprojectname) AND t.cdkdocument = t_dxmyjlxtz.cdkdocument; -- RETURN tmpvar; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN -- Consider logging the error and then re-raise RAISE; END dkye; FUNCTION bnljyjlx RETURN NUMBER IS tmpvar NUMBER; /****************************************************************************** 本年累计应计利息 ******************************************************************************/ BEGIN tmpvar := 0; SELECT NVL (SUM (NVL (iyjmoney, 0)), 0) INTO tmpvar --本年累计应计利息 FROM t_hig_borrow_jx t WHERE t.cstatus = y AND fn_date (y, t.djxenddate, v_date) = 1 AND (t.cprojectcode = v_cprojectcode OR t.cprojectname = v_cprojectname) AND t.cdkdocument = t_dxmyjlxtz.cdkdocument --贷款单号 AND t.csxtypecode <> zjsx.cj; --资金属性:内部拆借 RETURN tmpvar; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN -- Consider logging the error and then re-raise RAISE; END bnljyjlx; FUNCTION byyjlx RETURN NUMBER IS tmpvar NUMBER; /****************************************************************************** 本月应计利息 ******************************************************************************/ BEGIN tmpvar := 0; SELECT NVL (SUM (NVL (iyjmoney, 0)), 0) INTO tmpvar --本月应计利息 FROM t_hig_borrow_jx t WHERE t.cstatus = y AND fn_date ('M', t.djxenddate, v_date) = 1 AND (t.cprojectcode = v_cprojectcode OR t.cprojectname = v_cprojectname) AND t.cdkdocument = t_dxmyjlxtz.cdkdocument --贷款单号; AND t.csxtypecode <> zjsx.cj; --资金属性:内部拆借 RETURN tmpvar; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN RAISE; END byyjlx; FUNCTION bnljcjlx RETURN NUMBER IS tmpvar NUMBER; /****************************************************************************** 本年累计内部拆借利息 ******************************************************************************/ BEGIN tmpvar := 0; SELECT NVL (SUM (NVL (iyjmoney, 0)), 0) INTO tmpvar --本年累计内部拆借利息 FROM t_hig_borrow_jx t WHERE t.cstatus = y AND fn_date (y, t.djxenddate, v_date) = 1 AND (t.cprojectcode = v_cprojectcode OR t.cprojectname = v_cprojectname) AND t.cdkdocument = t_dxmyjlxtz.cdkdocument --贷款单号 AND t.csxtypecode = zjsx.cj; --资金属性:内部拆借 RETURN tmpvar; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN RAISE; END bnljcjlx; FUNCTION bycjlx RETURN NUMBER IS tmpvar NUMBER; /****************************************************************************** 本月内部拆借利息 ******************************************************************************/ BEGIN tmpvar := 0; SELECT NVL (SUM (NVL (iyjmoney, 0)), 0) INTO tmpvar --本月内部拆借利息 FROM t_hig_borrow_jx t WHERE t.cstatus = y AND fn_date ('M', t.djxenddate, v_date) = 1 AND (t.cprojectcode = v_cprojectcode OR t.cprojectname = v_cprojectname) AND t.cdkdocument = t_dxmyjlxtz.cdkdocument --贷款单号 AND t.csxtypecode = zjsx.cj; --资金属性:内部拆借 RETURN tmpvar; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN RAISE; END bycjlx; PROCEDURE insert_data IS /****************************************************************************** 插入数据 ******************************************************************************/ BEGIN INSERT INTO t_hig_borrow_dxmyjlxtz_his (cdkdocument, cinstallmentname, csxtypename, czjfroms, idkmoney, inothkmoney, iyfrate, iyjrate, ddkbegindate, dhkdate, ijxmoney, bnijxmoney, byijxmoney, bnijxmoneycj, byijxmoneycj, cdate, cprojectcode, cprojectname, iorder) VALUES (t_dxmyjlxtz.cdkdocument, t_dxmyjlxtz.cinstallmentname, t_dxmyjlxtz.csxtypename, t_dxmyjlxtz.czjfroms, t_dxmyjlxtz.idkmoney, t_dxmyjlxtz.inothkmoney, t_dxmyjlxtz.iyfrate, t_dxmyjlxtz.iyjrate, t_dxmyjlxtz.ddkbegindate, t_dxmyjlxtz.dhkdate, t_dxmyjlxtz.ijxmoney, t_dxmyjlxtz.bnijxmoney, t_dxmyjlxtz.byijxmoney, t_dxmyjlxtz.bnijxmoneycj, t_dxmyjlxtz.byijxmoneycj, v_date, CASE WHEN v_cprojectcode IS NULL THEN (SELECT t.cprojectcode FROM t_hig_borrow_dk t WHERE t.cprojectname = v_cprojectname) ELSE v_cprojectcode END, -- CASE WHEN v_cprojectname IS NULL THEN (SELECT cprojectname FROM t_hig_borrow_dk t WHERE t.cprojectcode = v_cprojectcode) ELSE v_cprojectname END, -- t_dxmyjlxtz.iorder); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN RAISE; END insert_data; PROCEDURE insert_heji IS /****************************************************************************** 插入合计 ******************************************************************************/ BEGIN INSERT INTO t_hig_borrow_dxmyjlxtz_his t (cdkdocument, idkmoney, inothkmoney, iyfrate, iyjrate, ijxmoney, bnijxmoney, byijxmoney, bnijxmoneycj, byijxmoneycj, cdate, cprojectcode, cprojectname, iorder) SELECT heji_code, SUM (s.idkmoney), SUM (s.inothkmoney), SUM (s.iyfrate), SUM (s.iyjrate), SUM (s.ijxmoney), SUM (s.bnijxmoney), SUM (s.byijxmoney), SUM (bnijxmoneycj), SUM (s.byijxmoneycj), v_date, v_cprojectcode, v_cprojectname, 1 FROM t_hig_borrow_dxmyjlxtz_his s --报表 表 WHERE s.cdate = v_date --合计此次查询的数据 AND (s.cprojectcode = v_cprojectcode OR s.cprojectname = v_cprojectname); --统计此项目下的所有单据,在当前时间点 /* 如果看到这里多出 group by 请删除,谢谢 */ EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN -- Consider logging the error and then re-raise RAISE; END insert_heji; BEGIN --循环每个贷款单 OPEN cur_dk (v_cprojectcode, v_cprojectname, v_date); IF cur_dk%NOTFOUND THEN -- SYS.DBMS_OUTPUT.PUT_LINE('WARN:根据您输入的参数无法查出任何数据!EXITED') ; RETURN; END IF; LOOP FETCH cur_dk INTO t_dxmyjlxtz.cdkdocument, --贷款单号 t_dxmyjlxtz.cinstallmentname, --分期 t_dxmyjlxtz.csxtypename, --资金属性 t_dxmyjlxtz.czjfroms, --资金来源 t_dxmyjlxtz.idkmoney, --贷款金额 t_dxmyjlxtz.iyfrate, --应付利率 t_dxmyjlxtz.iyjrate, --应计利率 t_dxmyjlxtz.ddkbegindate, --贷款日 t_dxmyjlxtz.dhkdate, --还款日 t_dxmyjlxtz.iorder; --排序 EXIT WHEN cur_dk%NOTFOUND; /* 应计利率和应付利率 资金属性:开发贷才分应付和应计 此行sql报错不应该不应该影响程序的继续执行 */ --------------------------------------------------------------------------------------------------------- --贷款余额 t_dxmyjlxtz.idkmoney := dkye (); --累计应计利息 t_dxmyjlxtz.ijxmoney := ljyjlx (); --本年累计应计利息 t_dxmyjlxtz.bnijxmoney := bnljyjlx (); --本月应计利息 t_dxmyjlxtz.byijxmoney := byyjlx (); --本年累计内部拆借利息 t_dxmyjlxtz.bnijxmoneycj := bnljcjlx (); --本月内部拆借利息 t_dxmyjlxtz.byijxmoneycj := bycjlx (); -- 插入数据 insert_data (); END LOOP; CLOSE cur_dk; -- 合计 insert_heji (); COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; RAISE; END p_hig_borrow_dxmyjlxtz; -------------------------------------------------------- -- DDL for Procedure P_HIG_BORROW_DXMYFLXTZ_FQ -------------------------------------------------------- PROCEDURE p_hig_borrow_dxmyflxtz_fq (v_date IN DATE, v_cprojectcode IN VARCHAR2, --项目编码 v_cprojectname IN VARCHAR2 --项目名称 ) --截止日期 AS /* 单项目应付利息台账-到分期 YINBIN 四种方式 2 */ BEGIN --插入数据 INSERT INTO t_hig_borrow_dxmyflxtz_fq_his t (fq, cdate, cprojectcode, cprojectname, iorder, fqcode) SELECT s.cinstallmentname, --分期 v_date, --截止日期 s.cprojectcode, --查询条件,项目编码 s.cprojectname, --查询条件,项目名称 f.iorder, f.cinstallmentcode -- 后来添加分期编码 FROM t_hig_borrow_dk s LEFT JOIN t_hig_szinstallment f ON s.cinstallmentcode = f.cinstallmentcode WHERE s.cstatus = y AND s.csxtypecode IN (zjsx.gd, zjsx.kf) --仅仅查询股东投入和开发贷 GROUP BY s.cinstallmentname, --分期 s.cprojectcode, --查询条件,项目编码 s.cprojectname, --查询条件,项目名称 f.iorder, f.cinstallmentcode; -- 后来添加分期编码; --更新查询字段 UPDATE t_hig_borrow_dxmyflxtz_fq_his t SET -- --------------------------------------------------累计 ljyfgdtr = --应付股东投入⑤ (SELECT SUM (j.iyfmoney) --取从项目开始至当前日股东投入应付利息实际数 TODO 现在取的是应付利息 FROM t_hig_borrow_jx j WHERE j.cprojectcode = t.cprojectcode AND j.cinstallmentcode = t.fqcode AND j.cstatus = y AND j.csxtypecode = zjsx.gd AND fn_date ('JD', j.djxenddate, v_date) = 1), ljyfgdtrlx = --已付股东投入利息② (SELECT SUM (h.ihxmoney - h.iyjmoney) --取从项目开始至当前日开发贷还息单中(本次付息金额-应计利息) FROM t_hig_borrow_hx h WHERE h.cprojectcode = t.cprojectcode AND h.cinstallmentcode = t.fqcode AND h.cstatus = y AND h.csxtypecode = zjsx.kf AND fn_date ('JD', h.dhxdate, v_date) = 1), ljyfkfd = --应付开发贷 (SELECT SUM (j.iyjmoney) --取从项目开始至当前日开发贷应计利息实际数 FROM t_hig_borrow_jx j WHERE j.cprojectcode = t.cprojectcode AND j.cinstallmentcode = t.fqcode AND j.cstatus = y AND j.csxtypecode = zjsx.kf AND fn_date ('JD', j.djxenddate, v_date) = 1), ljyfkfdlx = --已付开发贷利息③ (SELECT SUM (h.iyjmoney) --取从项目开始至当前日开发贷还息单中应计利息实际数 FROM t_hig_borrow_hx h WHERE h.cprojectcode = t.cprojectcode AND h.cinstallmentcode = t.fqcode AND h.cstatus = y AND h.csxtypecode = zjsx.kf AND fn_date ('JD', h.dhxdate, v_date) = 1), -- --------------------------------------------------本年 bnyfgdtr --应付股东投入⑤ = (SELECT SUM (j.iyjmoney) --取从项目开始至当前日股东投入应付利息实际数 FROM t_hig_borrow_jx j WHERE j.cprojectcode = t.cprojectcode AND j.cinstallmentcode = t.fqcode AND j.cstatus = y AND j.csxtypecode = zjsx.gd AND fn_date (y, j.djxenddate, v_date) = 1), bnyfgdtrlx --已付股东投入利息② = (SELECT SUM (h.ihxmoney - h.iyjmoney) --取从项目开始至当前日开发贷还息单中(本次付息金额-应计利息) FROM t_hig_borrow_hx h WHERE h.cprojectcode = t.cprojectcode AND h.cinstallmentcode = t.fqcode AND h.cstatus = y AND h.csxtypecode = zjsx.kf AND fn_date (y, h.dhxdate, v_date) = 1), bnyfkfd --应付开发贷 = (SELECT SUM (j.iyjmoney) --取从项目开始至当前日开发贷应计利息实际数 FROM t_hig_borrow_jx j WHERE j.cprojectcode = t.cprojectcode AND j.cinstallmentcode = t.fqcode AND j.cstatus = y AND j.csxtypecode = zjsx.kf AND fn_date (y, j.djxenddate, v_date) = 1), bnyfkfdlx --已付开发贷利息③ = (SELECT SUM (h.iyjmoney) --取从项目开始至当前日开发贷还息单中应计利息实际数 FROM t_hig_borrow_hx h WHERE h.cprojectcode = t.cprojectcode AND h.cinstallmentcode = t.fqcode AND h.cstatus = y AND h.csxtypecode = zjsx.kf AND fn_date (y, h.dhxdate, v_date) = 1), -- --------------------------------------------------本月 byyfgdtr --应付股东投入⑤ = (SELECT SUM (j.iyjmoney) --取从项目开始至当前日股东投入应付利息实际数 FROM t_hig_borrow_jx j WHERE j.cprojectcode = t.cprojectcode AND j.cinstallmentcode = t.fqcode AND j.cstatus = y AND j.csxtypecode = zjsx.gd AND fn_date ('M', j.djxenddate, v_date) = 1), byyfgdtrlx --已付股东投入利息② = (SELECT SUM (h.ihxmoney - h.iyjmoney) --取从项目开始至当前日开发贷还息单中(本次付息金额-应计利息) FROM t_hig_borrow_hx h WHERE h.cprojectcode = t.cprojectcode AND h.cinstallmentcode = t.fqcode AND h.cstatus = y AND h.csxtypecode = zjsx.kf AND fn_date ('M', h.dhxdate, v_date) = 1), byyfkfd --应付开发贷 = (SELECT SUM (j.iyjmoney) --取从项目开始至当前日开发贷应计利息实际数 FROM t_hig_borrow_jx j WHERE j.cprojectcode = t.cprojectcode AND j.cinstallmentcode = t.fqcode AND j.cstatus = y AND j.csxtypecode = zjsx.kf AND fn_date ('M', j.djxenddate, v_date) = 1), byyfkfdlx --已付开发贷利息③ = (SELECT SUM (h.iyjmoney) --取从项目开始至当前日开发贷还息单中应计利息实际数 FROM t_hig_borrow_hx h WHERE h.cprojectcode = t.cprojectcode AND h.cinstallmentcode = t.fqcode AND h.cstatus = y AND h.csxtypecode = zjsx.kf AND fn_date ('M', h.dhxdate, v_date) = 1) WHERE t.cdate = v_date; --更新计算字段 -- 更新 计算字段 UPDATE t_hig_borrow_dxmyflxtz_fq_his t SET --------------------------------------------------累计 ljzf = NVL (ljyfgdtrlx, 0) + NVL (ljyfkfdlx, 0), --累计支付①=②+③ ljwfgdtr = NVL (ljyfgdtr, 0) - NVL (ljyfgdtrlx, 0), --未付股东投入④=⑤-② --------------------------------------------------本年 bnljzf = NVL (bnyfgdtrlx, 0) + NVL (bnyfkfdlx, 0), --本年累计支付 bnwfgdtr = NVL (bnyfgdtr, 0) - NVL (bnyfgdtrlx, 0), --未付股东投入 --------------------------------------------------本月 bywfgdtr = NVL (byyfgdtr, 0) - NVL (byyfgdtrlx, 0) --本月股东投入 WHERE t.cdate = v_date; --分组合计插入 INSERT INTO t_hig_borrow_dxmyflxtz_fq_his t (fq, ljzf, ljyfgdtr, ljyfgdtrlx, ljwfgdtr, ljyfkfd, ljyfkfdlx, bnljzf, bnyfgdtr, bnyfgdtrlx, bnwfgdtr, bnyfkfd, bnyfkfdlx, byyfgdtr, byyfgdtrlx, bywfgdtr, byyfkfd, byyfkfdlx, cdate, cprojectcode, cprojectname, iorder, fqcode) SELECT heji_name, -- SUM (ljzf), SUM (ljyfgdtr), SUM (ljyfgdtrlx), SUM (ljwfgdtr), SUM (ljyfkfd), SUM (ljyfkfdlx), SUM (bnljzf), SUM (bnyfgdtr), SUM (bnyfgdtrlx), SUM (bnwfgdtr), SUM (bnyfkfd), SUM (bnyfkfdlx), SUM (byyfgdtr), SUM (byyfgdtrlx), SUM (bywfgdtr), SUM (byyfkfd), SUM (byyfkfdlx), cdate, cprojectcode, cprojectname, 1, heji_code FROM t_hig_borrow_dxmyflxtz_fq_his s WHERE s.cdate = v_date GROUP BY s.cdate, s.cprojectcode, s.cprojectname; /* --如果看到这里的group by 多出一些列,请删除 S.CDATE,S.CPROJECTCODE,S.CPROJECTNAME; */ COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; RAISE; END p_hig_borrow_dxmyflxtz_fq; -------------------------------------------------------- -- DDL for Procedure P_HIG_BORROW_DXMYZLXTZ -------------------------------------------------------- PROCEDURE p_hig_borrow_dxmyzlxtz (v_cprojectcode IN VARCHAR2, --项目编码 v_cprojectname IN VARCHAR2, --项目名称 v_cdate IN DATE --截止日期 ) AS /* 3.单生命周期应转利息台账 YINBIN */ p_num NUMBER; BEGIN SELECT COUNT (*) INTO p_num FROM t_hig_rzqzqbudget t WHERE t.cstatus = y AND (t.cprojectcode = v_cprojectcode OR t.cprojectname = v_cprojectname); IF p_num <= 0 THEN -- DBMS_OUTPUT.PUT_LINE('没有找到对应的预算,不再继续计算,项目名称是:'||V_CPROJECTNAME); RETURN; END IF; /* 插入主数据 */ INSERT INTO t_hig_borrow_dxmyzlxtz_his t (cinstallmentname, cprojectcode, cprojectname, cdate, iorder) SELECT t.cinstallmentname, --分期 s.cyhcode, --项目编码 s.cyhname, --项目名称 v_cdate, --截止日期 f.iorder --分期排序 FROM t_hig_rzqzqbudget t LEFT JOIN t_hig_szinstallment f ON f.cinstallmentcode = t.cinstallmentcode LEFT JOIN t_hig_szproject s ON (s.cyhcode = t.cprojectcode OR s.cyhname = t.cprojectname) WHERE t.cstatus = y AND (t.cprojectcode = v_cprojectcode OR t.cprojectname = v_cprojectname); -- ORDER BY T.CLASTUSERNAME; --TODO:不能查询dk和预算表,因为这些表可能不会包含所有项目? /* 更新 需要额外查询的字段 */ UPDATE t_hig_borrow_dxmyzlxtz_his t -- -------------------------------------------------------------------------------------------------------- -- 1.E2E资金成本动态预算 SET (idkbudget, irate, itime, zbhlxze, iarea, --2.已结转资本化利息 ijzarea, iqyarea --已签约面积 ) = (SELECT NVL (y.idkbudget, 0), --贷款预算 NVL (y.irate, 0), --利率 NVL (y.itime, 0), --周期 NVL (y.idkbudget, 0) * NVL (y.irate, 0) * NVL (y.itime, 0), --E2E资本化利息总额A 贷款预算 -- *利率*周期 NVL (y.iarea, 0), --总可售面积 NVL (y.ijzarea, 0), -- 已结转面积② NVL (y.iqyarea, 0) --已签约面积 FROM t_hig_rzqzqbudget y WHERE y.cstatus = y AND (y.cprojectname = t.cprojectname OR y.cprojectcode = t.cprojectcode) --项目匹配 AND y.cinstallmentname = t.cinstallmentname --分期 -- AND FN_DATE('JD',Y.DCREATEDATE,V_CDATE)=1 ), -- -------------------------------------------------------------------------------------------------------- -- 3.实际应计利息 C iyjmoney = (SELECT NVL (SUM (j.iyjmoney), 0) --取项目累计到当前月的实际应计利息数 FROM t_hig_borrow_jx j WHERE j.cstatus = y AND j.csxtypecode IN (zjsx.gd, zjsx.kf) --仅仅计算股东贷款和开发贷款 AND (j.cprojectname = t.cprojectname OR j.cprojectcode = t.cprojectcode) --项目匹配 AND j.cinstallmentname = t.cinstallmentname --分期 AND fn_date ('JM', j.djxenddate, v_cdate) = 1) WHERE (t.cprojectcode = v_cprojectcode OR t.cprojectname = v_cprojectname) AND cdate = v_cdate; --分期排序 /* */ UPDATE t_hig_borrow_dxmyzlxtz_his t SET -- -------------------------------------------------------------------------------------------------------- -- 4.计算字段 dpmzicb = CASE WHEN iarea = 0 THEN 0 ELSE zbhlxze / iarea END --单㎡资金成本① todo SET T.DPMZICB =(T.ZBHLXZE/T.IAREA), WHERE (t.cprojectcode = v_cprojectcode OR t.cprojectname = v_cprojectname) AND cdate = v_cdate; --分期排序 /* 更新计算字段1 */ UPDATE t_hig_borrow_dxmyzlxtz_his t SET yjzzbhlx = (NVL (dpmzicb, 0) * NVL (ijzarea, 0)), --已结转资本化利息B=①*② yqyzbhlx = (NVL (dpmzicb, 0) * NVL (iqyarea, 0)) --已签约资本化利息D=①*3 WHERE (t.cprojectcode = v_cprojectcode OR t.cprojectname = v_cprojectname) AND cdate = v_cdate; --分期排序 /* 更新计算字段2 */ UPDATE t_hig_borrow_dxmyzlxtz_his t SET wjzzbhlx = (NVL (zbhlxze, 0) - NVL (yjzzbhlx, 0)), --未结转资本化利息 wqyzbhlx = (NVL (zbhlxze, 0) - NVL (yqyzbhlx, 0)), --未签约资本化利息 iorder = (SELECT f.iorder FROM t_hig_szinstallment f WHERE f.cinstallmentname = t.cinstallmentname) WHERE (t.cprojectcode = v_cprojectcode OR t.cprojectname = v_cprojectname) AND cdate = v_cdate; --分期排序 /* 分组合计 */ /* 下面的合计列 相乘数测试: SELECT T.CINSTALLMENTNAME AS 分期, T.DPMZICB AS 单平米资金成本, T.IJZAREA AS 已结转面积, T.DPMZICB*T.IJZAREA AS 已结转资本化利息2, T.YJZZBHLX AS 已结转资本化利息, T.IQYAREA AS 已签约面积, T.DPMZICB*T.IQYAREA AS 已签约资本化利息2, T.YQYZBHLX AS 已签约资本化利息 FROM T_HIG_BORROW_DXMYZLXTZ_HIS T WHERE T.YJZZBHLX <> (T.DPMZICB*T.IJZAREA) OR T.YQYZBHLX <> (T.DPMZICB*T.IQYAREA); */ /* 是下面sql相减数的测试脚本 SELECT * FROM T_HIG_BORROW_DXMYZLXTZ_HIS T WHERE T.WJZZBHLX <>(T.ZBHLXZE-T.YJZZBHLX) OR T.WQYZBHLX <>(T.ZBHLXZE-T.YQYZBHLX) */ INSERT INTO t_hig_borrow_dxmyzlxtz_his t (cinstallmentname, idkbudget, irate, itime, zbhlxze, dpmzicb, iarea, ijzarea, yjzzbhlx, wjzzbhlx, iyjmoney, cprojectcode, cprojectname, cdate, iorder, iqyarea, yqyzbhlx, wqyzbhlx) SELECT heji_name, -- ROUND (SUM (s.idkbudget), 4), --贷款预算 ROUND (AVG (s.irate), 4), --利率 ROUND (AVG (s.itime), 4), --周期 ROUND (SUM (s.zbhlxze), 4), --E2E资本化利息总额A ROUND (DECODE (SUM (iarea), 0, 0, SUM (zbhlxze) / SUM (iarea)), 4), --单㎡资金成本① -- ROUND(SUM(S.DPMZICB),4), --单㎡资金成本① ROUND (SUM (s.iarea), 4), --总可售面积D ROUND (SUM (s.ijzarea), 4), --已结转面积② ROUND (DECODE (SUM (iarea), 0, 0, SUM (zbhlxze) / SUM (iarea) * SUM (s.ijzarea)), 4), --已结转资本化利息=①*② -- ROUND(SUM(S.YJZZBHLX),4),--已结转资本化利息=①*② ROUND (SUM (s.zbhlxze) - DECODE (SUM (iarea), 0, 0, SUM (zbhlxze) / SUM (iarea) * SUM (s.ijzarea)), 4), -- -- 未结转资本化利息 -- ROUND(SUM(S.WJZZBHLX),4), --未结转资本化利息 ROUND (SUM (s.iyjmoney), 4), --实际应计利息 v_cprojectcode, --项目编码 v_cprojectname, --项目名称 v_cdate, --查询条件——截止日期 1, --合计的排序,固定值 ROUND (SUM (s.iqyarea), 4), --已签约面积3 ROUND (DECODE (SUM (iarea), 0, 0, SUM (zbhlxze) / SUM (iarea) * SUM (s.iqyarea)), 4), -- -- 已签约资本化利息D=① -- *3 -- ROUND(SUM(S.YQYZBHLX),4),--已签约资本化利息D=①*3 ROUND (SUM (s.zbhlxze) - DECODE (SUM (iarea), 0, 0, SUM (zbhlxze) / SUM (iarea) * SUM (s.iqyarea)), 4) 未签约资本化利息 -- ROUND(SUM(S.WQYZBHLX),4) --未签约资本化利息 FROM t_hig_borrow_dxmyzlxtz_his s WHERE (s.cprojectcode = v_cprojectcode OR s.cprojectname = v_cprojectname) AND s.cdate = v_cdate; --只统计此次查询时间 COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; RAISE; END p_hig_borrow_dxmyzlxtz; -------------------------------------------------------- -- DDL for Procedure P_HIG_BORROW_DXMZJDKTZ_DK -------------------------------------------------------- PROCEDURE p_hig_borrow_dxmzjdktz_dk (v_date IN DATE) --截止日期 /* 2.单项目融资台账-到贷款单 yinbin 四种方式 3 */ AS BEGIN INSERT INTO t_hig_borrow_dxmzjdktz_dk_his t (cdocument, czjfroms, csxtypename, cskfname, cfdfname, idkmoney, ddkbegindate, ddkenddate, qixian, ihkmoney, inothkmoney, iactualrate, dklly1, dklly2, dklly3, lxftszq, lxftszh, cprojectcode, cprojectname, cfqcode, cfqname, cdate) WITH dk AS (SELECT t.cdocument AS dkdh, --贷款单号 t.czjfroms AS zjly, --资金来源 t.csxtypename AS zjsx, --资金属性 t.cskfname AS dkf, --贷款方 t.cfdfname AS fdf, --放贷方 t.idkmoney AS dkje, --贷款金额 t.ddkbegindate AS dkr, --贷款日 t.ddkenddate AS dqr, --到期日 t.ddkenddate - t.ddkbegindate AS qx, --期限 t.iyfrate AS fksyfll, --放款时应付利率 t.cprojectcode AS xmbm, --项目编码 t.cprojectname AS xmmc, --项目名称 t.cinstallmentcode AS fqcode, --分期编码 t.cinstallmentname AS fqname --分期名称 FROM t_hig_borrow_dk t WHERE t.cstatus = y AND fn_date ('JD', t.ddkbegindate, v_date) = 1), hk AS ( SELECT t.cdkdocument AS dkdh, --贷款单号 NVL (SUM (t.ihkmoney), 0) AS hkhj --还款合计 -- NVL(SUM(T.INOTHKMONEY),0) AS WHJE --未还金额 FROM t_hig_borrow_hk t WHERE t.cstatus = y AND fn_date ('JD', t.dhkdate, v_date) = 1 GROUP BY t.cdkdocument), jx AS ( SELECT t.cdkdocument AS dkdh, --贷款单号 NVL (SUM (t.iyjmoney), 0) AS yjlx, --应计利息金额 NVL (SUM (t.iyfmoney), 0) AS yflx --已付利息金额 FROM t_hig_borrow_jx t WHERE t.cstatus = y AND t.csxtypecode = zjsx.kf AND fn_date ('JD', t.djxenddate, v_date) = 1 GROUP BY t.cdkdocument), res AS (SELECT dk.dkdh AS dkdh, --贷款单号 dk.zjly AS zjly, --资金来源 dk.zjsx AS zjsx, --资金属性 dk.dkf AS dkf, --贷款方 dk.fdf AS fdf, --放贷方 dk.dkje AS dkje, --贷款金额 dk.dkr AS dkr, --贷款日 dk.dqr AS dqr, --到期日 dk.qx AS qx, --期限 hk.hkhj AS hkhj, --还款合计 NVL (dk.dkje, 0) - NVL (hk.hkhj, 0) AS whje, --未还金额 dk.fksyfll AS fksyfll, --放款时应付利率 fn_dkll (dk.dkdh, v_date, 1) AS y1, --贷款利率Y1 fn_dkll (dk.dkdh, v_date, 2) AS y2, --贷款利率Y2 fn_dkll (dk.dkdh, v_date, 3) AS y3, --贷款利率Y3 NVL (jx.yflx, 0) - NVL (jx.yjlx, 0) AS lxftszq, --四证前 利息分摊 jx.yjlx AS lxftszh, --四证后 利息分摊 dk.xmbm AS xmbm, --项目编码 dk.xmmc AS xmmc, --项目名称 dk.fqcode AS fqcode, --分期编码 dk.fqname AS fqname, --分期名称 v_date AS cdate --存储执行日期 FROM dk LEFT JOIN hk ON dk.dkdh = hk.dkdh LEFT JOIN jx ON dk.dkdh = jx.dkdh), heji AS ( SELECT heji_name AS dkdh, --贷款单号 NULL AS zjly, --资金来源 NULL AS zjsx, --资金属性 NULL AS dkf, --贷款方 NULL AS fdf, --放贷方 SUM (t.dkje) AS dkje, --贷款金额 NULL AS dkr, --贷款日 NULL AS dqr, --到期日 NULL AS qx, --期限 SUM(T.QX) SUM (t.hkhj) AS hkhj, --还款合计 SUM (t.whje) AS whje, --未还金额 NULL AS fksyfll, --放款时应付利率 AVG(T.FKSYFLL) NULL AS y1, --AVG(T.Y1) NULL AS y2, --AVG(T.Y2) NULL AS y3, --AVG(T.Y3) SUM (t.lxftszq) AS lxftszq, --四证前 利息分摊 SUM (t.lxftszh) AS lxftszh, --四证后 利息分摊 t.xmbm AS xmbm, --项目编码 t.xmmc AS xmmc, --项目名称 t.fqcode AS fqcode, --分期编码 t.fqname AS fqname, --分期名称 t.cdate AS cdate --存储执行日期 FROM res t GROUP BY t.xmbm, t.xmmc, t.fqcode, t.fqname, t.cdate /* GROUP BY T.XMBM, T.XMMC, T.FQCODE, T.FQNAME, T.CDATE 看到多了分组字段,请您对照上面的这个注释给与修改,谢谢 */ ) SELECT * FROM res UNION ALL SELECT * FROM heji; ---- COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; RAISE; END p_hig_borrow_dxmzjdktz_dk; -------------------------------------------------------- -- DDL for Procedure P_HIG_BORROW_QXMYZLXTZ -------------------------------------------------------- PROCEDURE p_hig_borrow_qxmyzlxtz (v_cdate IN DATE) --截止日期 AS /* 1.全生命周期应转利息台账 YINBIN */ BEGIN /*插入主数据*/ INSERT INTO t_hig_borrow_qxmyzlxtz_his t (cprojectcode, cprojectname, cdate, iorder, cprojectnamefmt, cstatus) SELECT t.cyhcode, --项目编码 t.cyhname, --项目名称 v_cdate, --查询条件——截止日期 t.iorder, --项目排序 t.cprojectname, --格式化后的项目名称 cstatus --是否是项目 FROM t_hig_szproject t WHERE t.bflag = 0 --是否是项目 AND t.byzflag = 0; --已经结转完毕的项目就不再显示 /*更新 需要额外查询的字段*/ UPDATE t_hig_borrow_qxmyzlxtz_his t -- -------------------------------------------------------------------------------------------------------- -- 1.E2E资金成本动态预算 SET (idkbudget, irate, itime, zbhlxze, iarea, --2.已结转资本化利息 ijzarea, --3.已签约面积 iqyarea) = (SELECT NVL (SUM (y.idkbudget), 0), --贷款预算 NVL (AVG (y.irate), 0), --利率 NVL (AVG (y.itime), 0), --周期 NVL (SUM (y.idkbudget), 1) * (NVL (AVG (y.irate), 0) / 100) * NVL (AVG (y.itime), 0), --E2E资本化利息总额=贷款预算*利率*周期 NVL (SUM (y.iarea), 0), --总可售面积 NVL (SUM (y.ijzarea), 0), --已结转面积② NVL (SUM (y.iqyarea), 0) --已签约资本化面积 FROM t_hig_rzqzqbudget y WHERE y.cstatus = y AND (y.cprojectname = t.cprojectname OR y.cprojectcode = t.cprojectcode) -- AND FN_DATE('JD',Y.DCREATEDATE,V_CDATE)=1 ), -- -------------------------------------------------------------------------------------------------------- -- 3.实际应计利息 C iyjmoney = (SELECT NVL (SUM (j.iyjmoney), 0) --取项目累计到当前月的实际应计利息数 FROM t_hig_borrow_jx j WHERE j.cstatus = y AND j.csxtypecode IN (zjsx.gd, zjsx.kf) --仅仅计算股东贷款和开发贷款 AND (j.cprojectcode = t.cprojectcode OR j.cprojectname = t.cprojectname) AND fn_date ('JM', j.djxenddate, v_cdate) = 1) WHERE cdate = v_cdate; --更新当天的东东 /* 计算字段 */ UPDATE t_hig_borrow_qxmyzlxtz_his t SET dpmzicb = CASE WHEN t.iarea = 0 THEN 0 ELSE NVL (zbhlxze, 0) / iarea END --单㎡资金成本① WHERE cdate = v_cdate; --更新当天的东东 /** */ -- -------------------------------------------------------------------------------------------------------- -- 4.计算字段 UPDATE t_hig_borrow_qxmyzlxtz_his t SET yjzzbhlx = (NVL (dpmzicb, 0) * NVL (ijzarea, 0)), --已结转资本化利息B=①*② yqyzbhlx = (NVL (dpmzicb, 0) * NVL (iqyarea, 0)) --已签约资本化利息D=①*3 WHERE cdate = v_cdate; --更新当天的东东。 UPDATE t_hig_borrow_qxmyzlxtz_his t SET wjzzbhlx = (NVL (zbhlxze, 0) - NVL (yjzzbhlx, 0)), --未结转资本化利息 wqyzbhlx = (NVL (zbhlxze, 0) - NVL (yqyzbhlx, 0)) --未签约资本化利息 WHERE cdate = v_cdate; --更新当天的东东。 COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; RAISE; END p_hig_borrow_qxmyzlxtz; -------------------------------------------------------- -- DDL for Procedure P_HIG_BORROW_DXMZJDKTZ_HK -------------------------------------------------------- PROCEDURE p_hig_borrow_dxmzjdktz_hk (v_date IN DATE) --截止日期 /* 2.单项目融资台账-到还款单 YINBIN */ AS p_num NUMBER; BEGIN --插入数据 INSERT INTO t_hig_borrow_dxmzjdktz_hk_his t (cdocument, cbankcategoryname, caccount, ihkmoney, dhkdate, cdkdocument, cdate, cprojectname, cprojectcode) WITH hk AS (SELECT t.cdocument AS hkdh, --还款单号 t.cbankname AS khyh, --开户银行 t.caccount AS zh, --账号 t.ihkmoney AS hkje, --还款金额 t.dhkdate AS hkrq, --还款日期 t.cdkdocument AS dkdh, --贷款单号 t.cprojectcode AS xmbm, --项目编码 t.cprojectname AS xmmc --项目名称 FROM t_hig_borrow_hk t WHERE t.cstatus = y AND fn_date ('JD', t.dhkdate, v_date) = 1), heji AS ( SELECT NULL AS hkdh, --还款单号 NULL AS khyh, --开户银行 NULL AS zh, --账号 ROUND (SUM (t.hkje), 4) AS hkje, --还款金额 NULL AS hkrq, --还款日期 t.dkdh AS dkdh, --贷款单号 t.xmbm AS xmbm, --项目编码 t.xmmc AS xmmc --项目名称 FROM hk t GROUP BY t.dkdh, t.xmbm, t.xmmc) SELECT hkdh, --还款单号 khyh, --开户银行 zh, --账号 hkje, --还款金额 hkrq, --还款日期 dkdh, --贷款单号 v_date, --存储执行日期 xmbm, --项目编码 xmmc --项目名称 FROM hk UNION ALL SELECT hkdh, --还款单号 khyh, --开户银行 zh, --账号 hkje, --还款金额 hkrq, --还款日期 dkdh, --贷款单号 v_date, --存储执行日期 xmbm, --项目编码 xmmc --项目名称 FROM heji; -- COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; RAISE; END p_hig_borrow_dxmzjdktz_hk; -------------------------------------------------------- -- DDL for Procedure P_HIG_BORROW_QXMYFLXTZ -------------------------------------------------------- PROCEDURE p_hig_borrow_qxmyflxtz (v_date IN DATE) --截止日期 AS /* 全项目应付利息台账 YINBIN */ --本年 需要改为 sysdate '2012-03-07' p_bennian NUMBER := EXTRACT (YEAR FROM v_date); --本月 需要改为 sysdate p_benyue NUMBER := EXTRACT (MONTH FROM v_date); BEGIN -- -- FOR P IN -- ( -- SELECT -- T.CYHCODE, --项目编码 -- T.CYHNAME, --项目名称 -- T.CPROJECTNAME,--格式化后的项目编码 -- T.CXMJYTZ, --经营体长 -- T.CSTATUS --是否是项目 -- FROM -- T_HIG_SZPROJECT T -- ) -- LOOP -- NULL; -- END LOOP INSERT INTO t_hig_borrow_qxmyflxtz_his t (cprojectcode, xmmc, cprojectnamefmt, jytz, cstatus, cdate, iorder) SELECT s.cyhcode, --项目编码 s.cyhname, --项目名称 s.cprojectname, --格式化后的项目编码 s.cxmjytz, --经营体长 s.cstatus, --是否是项目 v_date, --截止日期 s.iorder --排序 FROM t_hig_szproject s WHERE s.bflag = 0; --只查询有效的项目 --更新 查询字段 UPDATE t_hig_borrow_qxmyflxtz_his t SET -- --------------------------------------------------累计 ljyfgdtr --应付股东投入⑤ = (SELECT SUM (j.iyfmoney) --取从项目开始至当前日股东投入应付利息实际数 FROM t_hig_borrow_jx j WHERE j.cprojectcode = t.cprojectcode AND j.cstatus = y AND j.csxtypecode = zjsx.gd AND fn_date ('JD', j.djxenddate, v_date) = 1), ljyfgdtrlx --已付股东投入利息② = (SELECT SUM (h.ihxmoney - h.iyjmoney) --取从项目开始至当前日开发贷还息单中(本次付息金额-应计利息) FROM t_hig_borrow_hx h WHERE h.cprojectcode = t.cprojectcode AND h.cstatus = y AND h.csxtypecode = zjsx.kf AND fn_date ('JD', h.dhxdate, v_date) = 1), ljyfkfd --应付开发贷 = (SELECT SUM (j.iyjmoney) --取从项目开始至当前日开发贷应计利息实际数 FROM t_hig_borrow_jx j WHERE j.cprojectcode = t.cprojectcode AND j.cstatus = y AND j.csxtypecode = zjsx.kf AND fn_date ('JD', j.djxenddate, v_date) = 1), ljyfkfdlx --已付开发贷利息③ = (SELECT SUM (h.iyjmoney) --取从项目开始至当前日开发贷还息单中应计利息实际数 FROM t_hig_borrow_hx h WHERE h.cprojectcode = t.cprojectcode AND h.cstatus = y AND h.csxtypecode = zjsx.kf AND fn_date ('JD', h.dhxdate, v_date) = 1), -- --------------------------------------------------本年 bnyfgdtr --应付股东投入⑤ = (SELECT SUM (j.iyjmoney) --取从项目开始至当前日股东投入应付利息实际数 FROM t_hig_borrow_jx j WHERE j.cprojectcode = t.cprojectcode AND j.cstatus = y AND j.csxtypecode = zjsx.gd AND fn_date (y, j.djxenddate, v_date) = 1), bnyfgdtrlx --已付股东投入利息② = (SELECT SUM (h.ihxmoney - h.iyjmoney) --取从项目开始至当前日开发贷还息单中(本次付息金额-应计利息) FROM t_hig_borrow_hx h WHERE h.cprojectcode = t.cprojectcode AND h.cstatus = y AND h.csxtypecode = zjsx.kf AND fn_date (y, h.dhxdate, v_date) = 1), bnyfkfd --应付开发贷 = (SELECT SUM (j.iyjmoney) --取从项目开始至当前日开发贷应计利息实际数 FROM t_hig_borrow_jx j WHERE j.cprojectcode = t.cprojectcode AND j.cstatus = y AND j.csxtypecode = zjsx.kf AND fn_date (y, j.djxenddate, v_date) = 1), bnyfkfdlx --已付开发贷利息③ = (SELECT SUM (h.iyjmoney) --取从项目开始至当前日开发贷还息单中应计利息实际数 FROM t_hig_borrow_hx h WHERE h.cprojectcode = t.cprojectcode AND h.cstatus = y AND h.csxtypecode = zjsx.kf AND fn_date (y, h.dhxdate, v_date) = 1) -- SET -- ( -- --------------------------------------------------累计 -- LJYFGDTR, --应付股东投入⑤ -- LJYFGDTRLX,--已付股东投入利息② -- LJYFKFD, --应付开发贷 -- LJYFKFDLX, --已付开发贷利息③ -- --------------------------------------------------本年 -- BNYFGDTR, --应付股东投入 -- BNYFGDTRLX,--已付股东投入利息 -- BNYFKFD, --应付开发贷 -- BNYFKFDLX --已付开发贷利息 -- ) -- = -- ( -- SELECT -- 1,1,1,1,1,1,1,1 -- FROM -- DUAL -- ) WHERE t.cdate = v_date; -- 更新 计算字段 UPDATE t_hig_borrow_qxmyflxtz_his t SET --------------------------------------------------本年 bnljzf = NVL (bnyfgdtrlx, 0) + NVL (bnyfkfdlx, 0), --本年累计支付 bnwfgdtr = NVL (bnyfgdtr, 0) - NVL (bnyfgdtrlx, 0) --未付股东投入 WHERE t.cdate = v_date; UPDATE t_hig_borrow_qxmyflxtz_his t SET --------------------------------------------------累计 ljzf = NVL (ljyfgdtrlx, 0) + NVL (ljyfkfdlx, 0), --累计支付①=②+③ ljwfgdtr = NVL (ljyfgdtr, 0) - NVL (ljyfgdtrlx, 0) --未付股东投入④=⑤-② WHERE t.cdate = v_date; COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; RAISE; END p_hig_borrow_qxmyflxtz; /* punit测试,全部存储的测试入口 */ PROCEDURE test_all (ddate IN DATE, isclear IN BOOLEAN DEFAULT FALSE) IS begin_date NUMBER; end_date NUMBER; BEGIN IF isclear = TRUE THEN FOR c IN (SELECT ('DELETE FROM ' || t.table_name) AS text, t.table_name AS tname, c.comments AS comm FROM user_tables t LEFT JOIN user_tab_comments c ON c.table_name = t.table_name WHERE t.table_name LIKE '%T_HIG_BORROW_QXM%' OR t.table_name LIKE '%T_HIG_BORROW_DXM%') LOOP DBMS_OUTPUT.put_line ('清空了表:' || c.tname || '(' || c.comm || ')'); EXECUTE IMMEDIATE c.text; END LOOP; COMMIT; DBMS_OUTPUT.put_line ('表数据清理完毕!'); END IF; DBMS_OUTPUT.put_line ( '开始全部存储过程的测试!(如果某个存储过程有异常,会自动输出异常信息的)'); begin_date := DBMS_UTILITY.get_cpu_time (); /* SELECT 'CALL ' || t.object_name || '.' || t.procedure_name || '(:ddate)' AS text, t.object_name || '.' || t.procedure_name AS proc FROM user_procedures t WHERE t.object_name LIKE '%HIG_REPORT_BORROW%' AND t.procedure_name NOT LIKE 'P_%' AND t.procedure_name NOT LIKE 'FN_%' AND t.procedure_name NOT LIKE 'UTIL_%' AND t.procedure_name NOT LIKE 'LOG_%' AND t.procedure_name NOT LIKE 'TEST_%'; SELECT 'CALL ' || t.object_name || '.' || t.procedure_name || '(:ddate)' AS text, t.object_name || '.' || t.procedure_name AS proc FROM user_procedures t WHERE t.object_name LIKE '%HIG_REPORT_BORROW%' AND NOT EXISTS ( (SELECT * FROM user_procedures WHERE LENGTH (REGEXP_SUBSTR (t.procedure_name, '(^P_*)|(^FN_*)|(^UTIL_*)|(^LOG_*)|(^TEST_*)')) > 0)); */ FOR c IN (SELECT 'CALL ' || t.object_name || '.' || t.procedure_name || '(:ddate)' AS text, t.object_name || '.' || t.procedure_name AS proc FROM user_procedures t WHERE t.object_name LIKE '%HIG_REPORT_BORROW%' AND NOT REGEXP_LIKE (t.procedure_name, '(^P_*)|(^FN_*)|(^UTIL_*)|(^LOG_*)|(^TEST_*)')) LOOP EXECUTE IMMEDIATE c.text USING ddate; DBMS_OUTPUT.put_line (c.proc || ' complated!'); END LOOP; end_date := DBMS_UTILITY.get_cpu_time (); sys.DBMS_OUTPUT.put_line ('总共耗时:' || TO_CHAR (end_date - begin_date) || '毫秒'); DBMS_OUTPUT.put_line ('结束全部存储过程的测试!'); sys.DBMS_OUTPUT.put_line ('退出程序,请手动关闭此窗口!'); COMMIT; EXCEPTION WHEN OTHERS THEN end_date := DBMS_UTILITY.get_time (); sys.DBMS_OUTPUT.put_line ('总共耗时:' || TO_CHAR (end_date - begin_date) || '毫秒'); DBMS_OUTPUT.put_line (SQLCODE || ':' || SQLERRM); DBMS_OUTPUT.put_line ('结束全部存储过程的测试!'); ROLLBACK; RAISE; END test_all; END hig_report_borrow; /