达梦数据库存储过程

根据网上语法自学写的存储过程,使用的是DBeaver工具,但是调试过程太痛苦,也不清楚为什么有时候改了报错或者没生效。

注意点:

1.如果怀疑没生效或者不对,可以建个临时表每次往里面插不同数据确认代码是否最新。

2.不知道怎么调试或者输出信息也可以往临时表写入。

3.达梦如果是非自增长的,写法简单些。如果是自增长的,使用for循环隐形变量需要select所有需要的字段才能匹配上。

4.自增长的写入也把字段列全了,没有调查是否可以不写。

5.报错的内容应该是对的,但是行号不对。特别编译对象有问题,基本上不是语法问题,而是执行起来会有问题。

这个是有自增长的:

CREATE OR REPLACE PROCEDURE copyFLEX_SUBSIDY_SET_B(sourceTpye IN varchar2 ,sourceYear IN varchar2 , toType IN varchar2 ,toYear IN varchar2) AS
tempid number DEFAULT 0;
 --遍历游标
--CURSOR tempCur(tempTpye IN varchar2,tempYear IN varchar2) IS SELECT * FROM "FLEX_SUBSIDY_SET_B" WHERE "YEAR" =tempYear AND "SUBSIDY_TYPE"=tempTpye;
BEGIN
	--SELECT MAX(id) INTO tempid FROM  FLEX_SUBSIDY_SET_B;
	--清理历史数据
	DELETE FROM FLEX_SUBSIDY_SET_B WHERE "YEAR" =toYear AND "SUBSIDY_TYPE"=toType;

	--遍历查询数据
	--FOR tempdata IN tempCur(sourceTpye,sourceYear) loop
	FOR tempdata IN (SELECT id,"YEAR",SUBSIDY_TYPE,SET_ADMDVS,SUB_ADD_TYPE,QUOTA_BASIC_AMT,SUB_BASIC_AMT,SUB_BASIC_AMT_OV12,ARMY_SVC_PROP,ARMY_SVC_PROP_OV12,DED_BASIC_YEAR,DED_BASIC_YEAR_OV12,OT_RET_AMT,COMME_ADD_TYPE,COMME_ADD_L1,COMME_ADD_L2,COMME_ADD_L3,PAY_PROP,EXPRESS,BEGIN_TIME,END_TIME,VALID_FLAG,CREATE_TIME,UPDATE_TIME,DED_DESC,PAY_BASIC_DESC FROM FLEX_SUBSIDY_SET_B WHERE "YEAR" =sourceYear AND SUBSIDY_TYPE=sourceTpye) loop
		--插入数据
		tempid := tempid+1;
		
		INSERT INTO FLEX_SUBSIDY_SET_B("YEAR",SUBSIDY_TYPE,SET_ADMDVS,SUB_ADD_TYPE,QUOTA_BASIC_AMT,SUB_BASIC_AMT,SUB_BASIC_AMT_OV12,ARMY_SVC_PROP,ARMY_SVC_PROP_OV12,DED_BASIC_YEAR,DED_BASIC_YEAR_OV12,OT_RET_AMT,COMME_ADD_TYPE,COMME_ADD_L1,COMME_ADD_L2,COMME_ADD_L3,PAY_PROP,EXPRESS,BEGIN_TIME,END_TIME,VALID_FLAG,CREATE_TIME,UPDATE_TIME,DED_DESC,PAY_BASIC_DESC) values(toYear,toType,tempdata.SET_ADMDVS,tempdata.SUB_ADD_TYPE,tempdata.QUOTA_BASIC_AMT,tempdata.SUB_BASIC_AMT,tempdata.SUB_BASIC_AMT_OV12,
		tempdata.ARMY_SVC_PROP,tempdata.ARMY_SVC_PROP_OV12,tempdata.DED_BASIC_YEAR,tempdata.DED_BASIC_YEAR_OV12,
		tempdata.OT_RET_AMT,tempdata.COMME_ADD_TYPE,tempdata.COMME_ADD_L1,tempdata.COMME_ADD_L2,tempdata.COMME_ADD_L3,
		tempdata.PAY_PROP,tempdata.EXPRESS,toYear||'0101',toYear||'1231',tempdata.VALID_FLAG,
		tempdata.CREATE_TIME,tempdata.UPDATE_TIME,tempdata.DED_DESC,tempdata.PAY_BASIC_DESC);
		end loop;
END;

这个是没有自增长的:


CREATE OR REPLACE PROCEDURE copyFLEX_SUBSIDY_SET_TEST(sourceTpye IN varchar2 ,sourceYear IN varchar2 , toType IN varchar2 ,toYear IN varchar2) AS
tempid number DEFAULT 0;
 --遍历游标
--CURSOR tempCur(tempTpye IN varchar2,tempYear IN varchar2) IS SELECT * FROM "FLEX_SUBSIDY_SET_B_test" WHERE "YEAR" =tempYear AND "SUBSIDY_TYPE"=tempTpye;
BEGIN
	insert into test_tab values(8,'p_test');
	--清理历史数据
	DELETE FROM FLEX_SUBSIDY_SET_B_test WHERE "YEAR" =toYear AND "SUBSIDY_TYPE"=toType;
	SELECT MAX(id) INTO tempid FROM  FLEX_SUBSIDY_SET_B_test;
	--遍历查询数据
	--FOR tempdata IN tempCur(sourceTpye,sourceYear) loop
	FOR tempdata IN (SELECT * FROM FLEX_SUBSIDY_SET_B_test WHERE "YEAR" =sourceYear AND SUBSIDY_TYPE=sourceTpye) loop
		--插入数据
		tempid := tempid+1;
		
		INSERT INTO FLEX_SUBSIDY_SET_B_test values(tempid,toYear,toType,tempdata.SET_ADMDVS,tempdata.SUB_ADD_TYPE,tempdata.QUOTA_BASIC_AMT,tempdata.SUB_BASIC_AMT,tempdata.SUB_BASIC_AMT_OV12,
		tempdata.ARMY_SVC_PROP,tempdata.ARMY_SVC_PROP_OV12,tempdata.DED_BASIC_YEAR,tempdata.DED_BASIC_YEAR_OV12,
		tempdata.OT_RET_AMT,tempdata.COMME_ADD_TYPE,tempdata.COMME_ADD_L1,tempdata.COMME_ADD_L2,tempdata.COMME_ADD_L3,
		tempdata.PAY_PROP,tempdata.EXPRESS,toYear||'0101',toYear||'1231',tempdata.VALID_FLAG,
		tempdata.CREATE_TIME,tempdata.UPDATE_TIME,tempdata.DED_DESC,tempdata.PAY_BASIC_DESC);
		end loop;
END;

--EXEC VTPMS."copyFLEX_SUBSIDY_SET"('3','2023','2','2024');
--第一二参数是复制源和年度,第三次参数是复制目标和年度,一三参数:2是灵活就业!!!,3自主就业!!!,二四参数:年度如2024

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值