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

来源:互联网 发布:在线crm软件 编辑:程序博客网 时间:2024/05/16 06:04

最近项目需要迁库,顺便学习了一下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 resetMOdzhangHaoPassGOCREATE PROCEDURE resetMOdzhangHaoPass @zhid numeric(19,0) in,@zhnewpass varchar(128) in,@zhpasstime datetime inASBEGIN TRAN            UPDATE dzhanghaoInfo SET zhPass=@zhnewpass,zhPasstime=@zhpasstime WHERE zhid=@zhid        IF @@rowcount=0     BEGIN     COMMIT TRAN     RETURN 1       END                   COMMIT TRANRETURN 0GO

修改为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 //
原创粉丝点击