存储过程是由一组完成特定功能的SQL语句以及一组定义代码遵循一定规则组成,经编译后存储在数据库中,在需要的时候,通过指定存储过程的名字并给定参数来调用执行,通常被用来实现一些常用或很复杂的工作。
对于存储过程,不同的数据库在语法构成上大致相同,但是仍会稍有区别,图28 中分别给出了在SQL Server与MySQL中实现相同功能的一段存储过程的代码,通过对这两段代码的分析比较,来总结SQL Server与MySQL在存储过程上的区别。
图28 SQL Server与MySQL中实现相同功能的存储过程片段
(1)在SQL Server的存储过程中,在CREATE PROCEDURE过程名称后没有“( )”,而在MySQL中,存储过程名称后的“( )”是必需的,即便在没有一个参数的情况下,也是需要的。
(2)在SQL Server的存储过程中,每一个变量前都要加上符号“ @”,而在MySQL中是分情况进行处理的,对于参数而言,是不需要在参数名称前加“ @”的,但是需要用“ in”“ out”和“ inout”来指定该参数是输入参数还是输出参数,例如in asc_field int,若不指定,则默认为输入参数,即“ in”指定的情况。在MySQL的存储过程中,只有客户端变量前才需要加上“ @”。
(3)在SQL Server的存储过程中,变量bitOrderType初始赋值为0,而在MySQL中,与之对应的变量asc_field 是没有赋值的,这是因为MySQL存储过程中的参数是不允许指定默认值的。
(4)在SQL Server中,关键字“AS”意味着过程主体从此处开始,而在MySQL中,是不需要加上这一关键字的,过程主体从关键字“BEGIN”开始,在关键字“END”前结束。(www.xing528.com)
(5)在SQL Server中,也有关键字“BEGIN”和“END”,但是在SQL Server的存储过程中,关键字“BEGIN”相当于C语言中的“{”,表示的是语句块的开始。关键字“END”相当于C语言中的“}”,表示的是语句块的结束。在MySQL中,语句块“if...then...else”是用语句“end if;”来表示语句块的结束位置。
(6)在SQL Server的存储过程中,每条语句的末尾不需要任何标识,而在MySQL中,在每条语句的末尾都必须要加上分号“;”。
(7)在SQL Server的存储过程中,字符串相加可以直接使用“ +”,例如,对变量strOrderType的赋值@strOrderType='ORDER BY'+@ascColumn+'DESC',而在MySQL中,字符相加则需要使用函数concat(),例如,对于变量strOrderType相对应的变量sOrder的赋值始sOrder=concat('order by',order_field,'desc')。
(8)在SQL Server中,执行SQL语句,用的是关键词“exec”,MySQL中,与之对应的是关键词“Execute”。
(9)在SQL Server中的“ Go”表示一个存储过程的结束,而在MySQL中使用关键词“delimiter”来设置结束符,例如示例中“delimiter$ $”意味着该存储过程的定义在符号“ $ $”处结束,存储过程定义完毕后还可以再使用关键词“delimiter”来重新设置结束符。
SQL Server与MySQL在存储过程上的区别远不止这9 处,这里仅针对图28中所给的示例分析了二者在存储过程方面存在的区别,由于区别的细节不是本书重点,限于篇幅,在此就不逐一列举了。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。