求优化一个存储过程

瘦马 2016-12-28 05:08:32
如题
原存储过程如下
CREATE OR  REPLACE PROCEDURE HBBTDX
(
AID IN VARCHAR2,--被合并对象ID
BID IN VARCHAR2,--目标对象ID
ACODE IN VARCHAR2,--被合并对象CODE
BCODE IN VARCHAR2 -- 目标对象CODE
)
AS

ACNT NUMBER(2);
BCNT NUMBER(2);

BEGIN
SELECT COUNT(*) INTO ACNT FROM BASEOBJECT WHERE OBJECTCODE=ACODE;
SELECT COUNT(*) INTO BCNT FROM BASEOBJECT WHERE OBJECTCODE=BCODE;
IF ACNT=1 AND BCNT=1 THEN
DELETE FROM FSREGISTRATION WHERE REGMONEY=0 AND OBJECTID=AID;--删除补贴登记表中被合并对象的金额为0的补贴登记数据
UPDATE FSREGISTRATION SET OBJECTID=BID,OBJECTCODE=BCODE WHERE OBJECTID=AID AND OBJECTCODE=ACODE;--更新补贴登记表中被合并对象补贴登记数据为目标对象的
UPDATE bankpublish set peasantno=BCODE where peasantno=ACODE;--更新银行发放记录表中数据
DELETE FROM BASEOBJECTACCOUNT WHERE OBJECTID=AID;--删除被合并对象的银行账号
DELETE FROM BASEOBJECT WHERE OBJECTID=AID;--删除被合并对象
COMMIT;
ELSE
RETURN;
DBMS_OUTPUT.put_line('被合并补贴对象有'+ACNT+'户,目标对象有'+BCNT+'户');
END IF;
END HBBTDX;

求优化
...全文
126 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
瘦马 2017-01-09
  • 打赏
  • 举报
回复
引用 5 楼 POM_24 的回复:
DBMS_OUTPUT.put_line('被合并补贴对象有'+ACNT+'户,目标对象有'+BCNT+'户'); 拼接的时候,你使用+ 不报错? ORACLE的应该是|| 的吧?
谢谢您的提醒。
POM_24 2016-12-29
  • 打赏
  • 举报
回复
DBMS_OUTPUT.put_line('被合并补贴对象有'+ACNT+'户,目标对象有'+BCNT+'户'); 拼接的时候,你使用+ 不报错? ORACLE的应该是|| 的吧?
卖水果的net 2016-12-29
  • 打赏
  • 举报
回复
语句上没什么优化的空间了。 BASEOBJECT.OBJECTCODE,如果没有索引,可以创建一个
瘦马 2016-12-29
  • 打赏
  • 举报
回复
这 是ORACLE的存储过程, 主要想从事务方面进行优化,防止灾害发生
POM_24 2016-12-28
  • 打赏
  • 举报
回复
这个应该是SQL SERVER 的存储过程,感觉语句上没有什么需要优化的,就是删改; 看下SQL SERVER的执行计划,开销主要花在什么地方,然后具体优化; 估计你这几张表有大数据表,看下是不是考虑做哈希分区或者索引的使用是不是合理。
H_Gragon 2016-12-28
  • 打赏
  • 举报
回复
帮顶!

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧