前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL和Oracle对比之存储过程(r5笔记第7天)

MySQL和Oracle对比之存储过程(r5笔记第7天)

作者头像
jeanron100
发布2018-03-15 17:06:11
7070
发布2018-03-15 17:06:11
举报

昨天晚上帮一个朋友处理了一个关于存储过程的问题,他需要迁移一些Oracle中的存储过程到MySQL中来,但是改了一部分的程序,发现MySQL中没法编译了,报了很多的错误。 这个问题也比较典型,自己就趁热打铁总结了一下。 因为隐私的关系还有代码长度的关系,我就不罗列代码了。 假设Oracle中的存储过程如下,我们需要改写为MySQL代码: set serveroutput on CREATE or replace PROCEDURE test_proc( in_value IN varchar2) as stmt_bz number; stmt_dml varchar2(200); begin stmt_bz:=100; stmt_dml:=in_value||' insert into new_test(id,' || 'name)' || ' values('||stmt_bz||','||''''||stmt_bz||''''||')'; dbms_output.put_line(stmt_dml); end; / exec test_proc('test'); 运行情况如下: SQL> exec test_proc('test'); test insert into new_test(id,name)values(100,'100') PL/SQL procedure successfully completed. 看起来逻辑也不复杂,但是要迁移到MySQL中还是有不少的细节需要注意。 delimiter // DROP PROCEDURE IF EXISTS `test_proc`// CREATE PROCEDURE test_proc(IN in_value varchar(2000)) begin declare stmt_bz int; declare stmt_dml varchar(200); set stmt_bz=100; set stmt_dml=concat(' insert into new_test(id,' , 'name)' , 'values(',stmt_bz,',','''',stmt_bz,'''',')'); select stmt_dml; end // delimiter ; call test_proc('test'); 输出结果如下: mysql> call test_proc('test'); +-------------------------------------------------+ | stmt_dml | +-------------------------------------------------+ | insert into new_test(id,name)values(100,'100') | +-------------------------------------------------+ 1 row in set (0.01 sec) Query OK, 0 rows affected (0.01 sec) 第一处是分隔符的问题,delimiter 在MySQL在是可以自行制定的。我们暂定为// 第二处是关于drop procedure和create procedure,在Oracle中就可以直接制定为create or replace procedure 第三处是关于传入参数in_value,字符型传入参数在MySQL中就是varchar(2000),在Oracle就是varchar2 (注意不是varchar2(2000)) 第四处是begin的部分,在Oracle中就是as begin来开启的,但是在MySQL就可以直接begin了。 第五处是声明变量在MySQL中就需要逐步声明,declare,但是在Oracle中是作为匿名pl/sql块一样来处理 第六处是变量初始化,在oracle中直接使用stmt_bz:=100; 但是在MySQL中需要用set stmt_bz=100; 第七处是关于字符串拼接,在MySQL中会用concat,在Oracle中可以使用||来拼接。 第八处就是输出变量,MySQL中使用select stmt_dml; 直接查询即可,在oracle可以调用dbms_output来输出。 第九处就是调用存储程序,在Oracle中使用exec,call都可以,在MySQL中只能使用call

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-04-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档