oracle存储过程转MYSQL

nxvan 2012-07-23 11:23:51
因为项目要移植到mysql上,LZ就开始折腾了,其他都弄好了,就是剩下一个存储过程啦!
时间已经来不及了,LZ对mysql存储过程的语法规则已经凌乱了,其实功能很简单的,这个语法
规则就难为LZ了,所以在这里发帖求帮助···多谢各位大侠··
这是oracle的过程

CREATE OR REPLACE PACKAGE BODY pkg_SVN AS

PROCEDURE SVN_PROJECT_USER(
Prm_AppCode OUT VARCHAR2,
Prm_ErrorMsg OUT VARCHAR2)
AS
V_LASTDAY DATE;

CURSOR C_PROJECTUSER IS
SELECT A.PROJECTID,
C.YAE092,
MAX(B.AAE036) as aae036
FROM PROJECTINFO A, SVNLOG B,AD53A4 C
WHERE B.FILEPATH LIKE A.FULLPATH || '%'
AND B.AAE036 > V_LASTDAY
AND B.AAE036 < SYSDATE
AND B.YAE041 = C.YAE041
AND C.YAE092 <> '9999999'
GROUP BY A.PROJECTID,C.YAE092
ORDER BY A.PROJECTID;

BEGIN
--获取上次执行时间--
SELECT MAX(LASTDATE)
INTO V_LASTDAY
FROM PROJECTUSER;

for rec_tmp in C_PROJECTUSER loop
UPDATE PROJECTUSER
SET LASTDATE = rec_tmp.aae036
WHERE PROJECTID = rec_tmp.PROJECTID
AND YAE092 = rec_tmp.YAE092;
END LOOP;

insert into syslog(
yab903,
yab904,
aae011,
aae036)
values('9',
'自动同步',
'9999999',
sysdate);

Prm_AppCode := 'NOERROR';
Prm_ErrorMsg := 'ok';
EXCEPTION
WHEN OTHERS THEN
Prm_AppCode := '9999';
Prm_ErrorMsg := SQLERRM;
DBMS_OUTPUT.PUT_LINE('发生错误!');
END;

end;




这是半成品mysql

DELIMITER $$

DROP PROCEDURE IF EXISTS `svn`.`SVN_PROJECT_USER` $$
CREATE PROCEDURE `svn`.`SVN_PROJECT_USER` (OUT Prm_AppCode VARCHAR(500),OUT Prm_ErrorMsg VARCHAR(500))
begin
declare finished integer default 0;
declare V_LASTDAY DATETIME;
declare V_PROJECTID VARCHAR(100);
declare V_YAE092 VARCHAR(100);
declare V_AAE036 DATETIME;
declare C_PROJECTUSER CURSOR for
SELECT A.PROJECTID,
C.YAE092,
MAX(B.AAE036) as aae036
FROM PROJECTINFO A, SVNLOG B,AD53A4 C
WHERE B.FILEPATH LIKE A.FULLPATH || '%'
AND B.AAE036 > V_LASTDAY
AND B.AAE036 < SYSDATE()
AND B.YAE041 = C.YAE041
AND C.YAE092 <> '9999999'
GROUP BY A.PROJECTID,C.YAE092
ORDER BY A.PROJECTID;
declare continue handler for not found set finished = 1;

SELECT MAX(LASTDATE)
INTO V_LASTDAY
FROM PROJECTUSER;
open C_PROJECTUSER;
repeat
fetch C_PROJECTUSER into V_PROJECTID,V_YAE092,V_AAE036;
UPDATE PROJECTUSER
SET LASTDATE = V_AAE036
WHERE PROJECTID = V_PROJECTID
AND YAE092 = V_YAE092;
END repeat;
close C_PROJECTUSER;
insert into syslog(
yab903,
yab904,
aae011,
aae036)
values('9',
'自动同步',
'9999999',
sysdate);

Prm_AppCode := 'NOERROR';
Prm_ErrorMsg := 'ok';
EXCEPTION
WHEN OTHERS THEN
Prm_AppCode := '9999';
Prm_ErrorMsg := SQLERRM;
DBMS_OUTPUT.PUT_LINE('发生错误!');
END;
END $$

DELIMITER ;


这呢,就是主要几张表的建表SQL了

create table PROJECTINFO
(
PROJECTID VARCHAR2(20) not null,
PROJECTNAME VARCHAR2(200),
YAB109 VARCHAR2(20),
FULLPATH VARCHAR2(1000) not null,
PROJECTSTAT VARCHAR2(6),
AAE011 VARCHAR2(20) not null,
AAE036 DATE not null,
MANAGER VARCHAR2(20)
)

create table SVNLOG
(
REVISION VARCHAR2(20) not null,
YAE041 VARCHAR2(100) not null,
AAE036 DATE not null,
FILEPATH VARCHAR2(500) not null,
OPRA CHAR(10) not null
)

create table AD53A4
(
YAE092 VARCHAR2(20) not null,
YAB109 VARCHAR2(20) not null,
AAC003 VARCHAR2(40) not null,
YAE041 VARCHAR2(40) not null,
YAE042 VARCHAR2(40) not null,
USERSTAT VARCHAR2(6) not null,
AAE011 VARCHAR2(20) not null,
AAE036 DATE not null
)

create table PROJECTUSER
(
YAE092 VARCHAR2(20) not null,
PROJECTID VARCHAR2(20) not null,
PROJECTUSERSTAT VARCHAR2(2),
AAE011 VARCHAR2(20) not null,
AAE036 DATE not null,
LASTDATE DATE
)


create table SYSLOG
(
YAB903 VARCHAR2(6) not null,
YAB904 VARCHAR2(4000) not null,
AAE011 VARCHAR2(20) not null,
AAE036 DATE not null
)



各位好心人帮帮已经快绝望的LZ吧555
...全文
96 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2012-07-24
  • 打赏
  • 举报
回复
楼主描述一下你自己写的存储过程目前有什么问题?
rucypli 2012-07-24
  • 打赏
  • 举报
回复
好心人看着这么多就犯困

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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