因为项目要移植到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;
这是半成品mysqlDELIMITER $$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