这个存储过程主要是将把下一个月的数据删除,然后将上一个月的数据差出来插入到下个月中!例如将2007-02的数据删除,在将2007-01的数据复制给2007-02!代码如下(在复制数据的时候就会跳出,单独运行SQL语句没错误):
CREATE OR REPLACE PROCEDURE Clearing_kjqj(gsdm IN varchar2,kjqj IN varchar2)
AS
v_gsdm VARCHAR2(20); --公司代码
v_kjqj VARCHAR2(20); --会计期间 格式为YYYY-MM
/************************************************************************/
/*中文名称: 年结的时候拷贝上一月基础数据给下一月用 */
/*调用方法: Clearing_kjqj(gsdm,kjqj) */
/*作者: 陈川 */
/*创建时间: 2007-12-17 */
/*数据库版本:Oracle9204 */
/*输入参数: gsdm,kjqj */
/*输出参数: */
/*返回: */
/*下级调用 */
/************************************************************************/
BEGIN
v_gsdm:=gsdm;
v_kjqj:=to_char(add_months(to_date(kjqj,'yyyy-mm'),1),'yyyy-mm');
DELETE FROM cb_djb t where t.kjqj=v_kjqj and t.gsdm=v_gsdm;
DELETE FROM cb_clb t where t.kjqj=v_kjqj and t.gsdm=v_gsdm;
DELETE FROM cb_fyxh t where t.kjqj=v_kjqj and t.gsdm=v_gsdm;
INSERT INTO cb_clb SELECT t.gsdm,v_kjqj,t.cpdm,t.jldw,t.jhcl,t.decl,t.bzcl,t.khcl,t.sjcl FROM cb_clb t where t.kjqj=kjqj and t.gsdm=v_gsdm;--产量表
INSERT INTO cb_djb SELECT v_kjqj,t.gsdm,t.dm,t.fzlx,t.jldw,t.jhdj,t.dedj,t.bzdj,t.khdj,t.gndj,t.gjdj,t.sjdj FROM cb_djb t where t.kjqj=kjqj and t.gsdm=v_gsdm;--单价表
INSERT INTO cb_fyxh SELECT t.gsdm,v_kjqj,t.fydm,t.jldm,t.fzlxjg,t.fzdmjg,t.jhsl,t.desl,t.bzsl,t.khsl,t.sjsl,t.fzlx FROM cb_fyxh t where t.kjqj=kjqj and t.gsdm=v_gsdm;--吨钢消耗
Commit;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END Clearing_kjqj;
CREATE OR REPLACE PROCEDURE Clearing_kjqj(gsdm IN varchar2,kjqj IN varchar2)
AS
v_gsdm VARCHAR2(20); --公司代码
v_kjqj VARCHAR2(20); --会计期间 格式为YYYY-MM
/************************************************************************/
/*中文名称: 年结的时候拷贝上一月基础数据给下一月用 */
/*调用方法: Clearing_kjqj(gsdm,kjqj) */
/*作者: 陈川 */
/*创建时间: 2007-12-17 */
/*数据库版本:Oracle9204 */
/*输入参数: gsdm,kjqj */
/*输出参数: */
/*返回: */
/*下级调用 */
/************************************************************************/
BEGIN
v_gsdm:=gsdm;
v_kjqj:=to_char(add_months(to_date(kjqj,'yyyy-mm'),1),'yyyy-mm');
DELETE FROM cb_djb t where t.kjqj=v_kjqj and t.gsdm=v_gsdm;
DELETE FROM cb_clb t where t.kjqj=v_kjqj and t.gsdm=v_gsdm;
DELETE FROM cb_fyxh t where t.kjqj=v_kjqj and t.gsdm=v_gsdm;
INSERT INTO cb_clb SELECT t.gsdm,v_kjqj,t.cpdm,t.jldw,t.jhcl,t.decl,t.bzcl,t.khcl,t.sjcl FROM cb_clb t where t.kjqj=kjqj and t.gsdm=v_gsdm;--产量表
INSERT INTO cb_djb SELECT v_kjqj,t.gsdm,t.dm,t.fzlx,t.jldw,t.jhdj,t.dedj,t.bzdj,t.khdj,t.gndj,t.gjdj,t.sjdj FROM cb_djb t where t.kjqj=kjqj and t.gsdm=v_gsdm;--单价表
INSERT INTO cb_fyxh SELECT t.gsdm,v_kjqj,t.fydm,t.jldm,t.fzlxjg,t.fzdmjg,t.jhsl,t.desl,t.bzsl,t.khsl,t.sjsl,t.fzlx FROM cb_fyxh t where t.kjqj=kjqj and t.gsdm=v_gsdm;--吨钢消耗
Commit;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END Clearing_kjqj;
BEGIN
v_gsdm:=gsdm;
v_kjqj:=to_char(add_months(to_date(kjqj,'yyyy-mm'),1),'yyyy-mm');
DELETE FROM cb_djb t where t.kjqj=v_kjqj and t.gsdm=v_gsdm;
DELETE FROM cb_clb t where t.kjqj=v_kjqj and t.gsdm=v_gsdm;
DELETE FROM cb_fyxh t where t.kjqj=v_kjqj and t.gsdm=v_gsdm;--提交,
commit;INSERT INTO cb_clb SELECT t.gsdm,v_kjqj,t.cpdm,t.jldw,t.jhcl,t.decl,t.bzcl,t.khcl,t.sjcl FROM cb_clb t where t.kjqj=kjqj and t.gsdm=v_gsdm;--产量表
INSERT INTO cb_djb SELECT v_kjqj,t.gsdm,t.dm,t.fzlx,t.jldw,t.jhdj,t.dedj,t.bzdj,t.khdj,t.gndj,t.gjdj,t.sjdj FROM cb_djb t where t.kjqj=kjqj and t.gsdm=v_gsdm;--单价表
INSERT INTO cb_fyxh SELECT t.gsdm,v_kjqj,t.fydm,t.jldm,t.fzlxjg,t.fzdmjg,t.jhsl,t.desl,t.bzsl,t.khsl,t.sjsl,t.fzlx FROM cb_fyxh t where t.kjqj=kjqj and t.gsdm=v_gsdm;--吨钢消耗
Commit;
EXCEPTION
WHEN OTHERS THEN --把错误的信息输出来看看.
dbms_output.putline(sqlerrm); ROLLBACK;
END Clearing_kjqj;
when others then
output.putline(sqlerrm||to_char(sqlcode));