Sybase数据库存储过程转化为Mysql数据库存储过程

最近项目需要迁库,顺便学习了一下Sybase数据库存储过程,转化为Mysql数据库存储过程,我也算是初 学者,记录一下学习过程,若有问题还望会者不吝赐教。

注意:主要修改语法上有区别的地方,业务逻辑不可修改。
1.存储过程中使用事务时需注意,mysql的引擎有的不支持事务,如myisam引擎,此时事务没有作用;
innodb引擎是支持事务的,但要查看系统参数(autocommit)设置是否自动commit,若值为on表示事务自动提交,off表示手动去commit。
2.传入参数声明注意:mysql存储过程中,IN表示输入参数,OUT表示从存储过程内部输出参数,INOUT表示可以传入参数,也可以输出参数。
3.执行成功或失败返回值注意,sybase用return返回,mysql没有return所以需要用lable_a:标识返回,用LEAVE lable_a;返回。
4.mysql判断成功执行条数注意,判断Select得到的行数用found_rows()函数进行判断;判断Update或Delete影响的行数用row_count()函数进行判断,这里需要注意,如果Update前后的值一样,row_count则为0,而不像SqlServer里的@@rowcount或Oracle里的rowcount,只要update到行,影响的行数就会大于0,而无论update前后字段的值是否发生了变化。
5.数字库字段用到关键字注意,比如value或type,需要用 “ 符号(Esc键下边的符号)将字段括起来,否则报错。
6.sybase转为mysql时间注意,mysql中的now() 函数可直接替换sybase中的getdate() 函数。
7.语法结构注意,IF语句使用的是IF…THEN END IF的语法结构,CASE语句CASE… WHEN … THEN ELSE .. END CASE,WHILE语句WHILE…END WHILE

Sybase存储过程实例:

DROP PROCEDURE resetMOdzhangHaoPass
GO
CREATE PROCEDURE resetMOdzhangHaoPass 
@zhid numeric(19,0) in,
@zhnewpass varchar(128) in,
@zhpasstime datetime in
AS
BEGIN TRAN         
   UPDATE dzhanghaoInfo SET zhPass=@zhnewpass,zhPasstime=@zhpasstime WHERE zhid=@zhid 
       IF @@rowcount=0
     BEGIN
     COMMIT TRAN
     RETURN 1
       END                   
COMMIT TRAN
RETURN 0
GO

修改为mysql存储过程实例

DELIMITER //
CREATE PROCEDURE resetMOdzhangHaoPass(
IN in_zhid NUMERIC(19,0),
IN in_zhnewpass VARCHAR(128),
IN in_zhpasstime DATETIME,

OUT out_retcode INT
)

lable_a:BEGIN
    UPDATE dzhanghaoInfo SET zhPass=in_zhnewpass,zhPasstime=in_zhpasstime WHERE zhid=in_zhid;
    IF ROW_COUNT()=0 THEN
      SET out_retcode = 1;
      COMMIT;
      LEAVE lable_a;
    ELSE
      SET out_retcode = 0;
      COMMIT;
      LEAVE lable_a;
    END IF;
END //

你可能感兴趣的:(mysql)