工作中所写的一次关于用到游标的存储过程记录

部分代码:
--协议配置表

DECLARE--游标声明
	MONTH_NUM int ( 8 );
i INT ( 11 );
cursor cur_info IS --select语句
SELECT
	t.cont_no,
	t.sign_date,
	t.sign_user,
	t.sex,
	t.pbk_num,
	t.tx_addr,
	t.sign_type,
	t.main_br_id,
	t.cust_mgr_name,
	t.cust_mgr,
	t.loan_bal,
	t.loan_int,
	t.time_quantum,
	t.batch_num,
	t.re_date,
	t1.protocol_id AS PROTOCOL_ID 
FROM
	t_protocol_export_temp t
	LEFT JOIN t_protocol t1 ON t.CONT_NO = t1.cont_no;-- 从临时表查询数据
row_info cur_info % rowtype; --指定行指针
BEGIN--for循环
	FOR row_info IN cur_info --临时表中每一条数据
	loop
	IF
		row_info.time_quantum = '月' THEN
			MONTH_NUM := 1;
		ELSIF row_info.time_quantum = '季' THEN
			MONTH_NUM := 3;
			ELSIF row_info.time_quantum = '年' THEN
				MONTH_NUM := 12;
				
			END IF;
			i := 1;
			FOR i IN 1..row_info.batch_num
			loop
			dbms_output.put_line ( '按' || row_info.time_quantum || '---期数:---:' || i || '-----还款日期:------' || row_info.re_date );
			IF
				i = row_info.batch_num THEN
					INSERT INTO T_PROTOCOL_CONF (
						PROTOCOL_CONF_ID,
						PROTOCOL_ID,
						BATCH_NUM,
						RE_DATE,
						RE_AMOUNT,
						ACTUAL_AMOUNT,
						DIF_AMOUNT,
						STATUS,
						RE_RESULT,
						IS_VALID,
						CREATE_BY,
						CREATE_DATE,
						UPDATE_BY,
						UPDATE_DATE,
						REMARK,
						RE_INT,
						ACTUAL_INT,
						LAST_BATCH_RE_DATE,
						NOTICE_STATUS 
					)
				VALUES
					(
						seq_t_protocol_conf.nextval,
						row_info.PROTOCOL_ID,
						i,
						row_info.re_date,-- 还款协议日
						row_info.LOAN_BAL - round( row_info.loan_bal / row_info.batch_num, 2 ) * ( row_info.batch_num - 1 ),
						'0',
						'0',
						'0',
						'0',
						'1',
						NULL,
						SYSDATE,
						NULL,
						SYSDATE,
						NULL,
						row_info.LOAN_INT - round( row_info.loan_int / row_info.batch_num, 2 ) * ( row_info.batch_num - 1 ),
						'0',
						NULL,
					NULL 
					);
				row_info.re_date := to_char( add_months( to_date( row_info.re_date, 'yyyymmdd' ),+ MONTH_NUM ), 'yyyymmdd' );
				ELSE INSERT INTO T_PROTOCOL_CONF (
					PROTOCOL_CONF_ID,
					PROTOCOL_ID,
					BATCH_NUM,
					RE_DATE,
					RE_AMOUNT,
					ACTUAL_AMOUNT,
					DIF_AMOUNT,
					STATUS,
					RE_RESULT,
					IS_VALID,
					CREATE_BY,
					CREATE_DATE,
					UPDATE_BY,
					UPDATE_DATE,
					REMARK,
					RE_INT,
					ACTUAL_INT,
					LAST_BATCH_RE_DATE,
					NOTICE_STATUS 
				)
				VALUES
					(
						seq_t_protocol_conf.nextval,
						row_info.PROTOCOL_ID,
						i,
						row_info.re_date, --还款协议日
						round( row_info.loan_bal / row_info.batch_num, 2 ),
						'0',
						'0',
						'0',
						'0',
						'1',
						NULL,
						SYSDATE,
						NULL,
						SYSDATE,
						NULL,
						round( row_info.loan_int / row_info.batch_num, 2 ),
						'0',
						NULL,
					NULL 
					);
				row_info.re_date := to_char( add_months( to_date( row_info.re_date, 'yyyymmdd' ),+ MONTH_NUM ), 'yyyymmdd' );
				
			END IF;
			
		END loop;

END loop;

END;
/
COMMIT;
posted @ 2022-02-16 16:20  336土豆快跑  阅读(25)  评论(0编辑  收藏  举报