工作中所写的一次关于用到游标的存储过程记录
部分代码:
--协议配置表
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;