SQLServer2000到Oracle11G存储过程转换技术探究
2017-04-25叶红良
叶红良
摘要:本文主要讲述了存储过程转换的具体意义,并详细的说明了不同数据库之间的存储过程的差异,还提出了一种从SQLeSvrerZ000到oracle11G存储过程转换的方法,并且阐述了存储过程的差异和转换以及其具体的设计思路,文中所写转换技术对异种数据库存储过程转换具有普遍的指导意义。
关键词:SQLeSvrerZ000;oracle11G;存储过程;转换技术
中图分类号:TP311.13 文献标识码:A 文章编号:1007-9416(2017)01-0048-01
1 存储过程的差异和转换
在SQL标准产生之前,数据库所使用的是大量的SQL专用语言,这些专用语言在一定程度上植入了个性化的特征,与此同时广受用户群体的青睐。伴随着SQL标准的相继完善,厂商们所用的专用语言也不断向前发展,在此过程中大量的专用语言被引入程序设计概念,从而实现强大的业务逻辑功能。功能中包含了异常处理机制、流控制语法以及众多的扩展功能。大多数专用语言从根本上彼此之间的规范存有显著的差异,就连在实现功能的技术上也是分门别类,但大量的专用语言中都含有条件处理、循环控制、变量声明赋值和异常处理等一系列程序设计语言机制。
SQL语言是SQLServer源程序当中的专用语言,当中的大部分特性并不能够获得Oarcle数据库专用语言的支持,尽管两者间所要实现的功能是相同的,可是两者之间所用的语言机制且截然不同。更为复杂的情况是两者间的语言特性无法对等实现,为了能够实现拥有这一特性的SQLServer存储过程的转换,需要使用PL/SQL相关语句进行模拟,这一过程中极易造成语义丢失或在结果中出现歧义。
下面以SQLeSrver2000的数据定义语句为例进行转换过程分析,其他语句的转换过程与此类似。
首先给出SQLServer20OO中CREATE PROCEDURE语句简化的上下文无关文法:
CREATE PROC[EDURE]
[{@rameter
][,…,n]
AS
l(INSERT STATEMENT) …
根據SQLServer2000的CREATEPROCEDURE语句上下文无关文法可构造实例如下,它是转换程序要进行分析处理的源程序:
CREATE PROCEDURE au_nfo
@lastnamevacrhar(40),
@firstnamevarehar(20)
AS
SELECT * FROM authors
WHERE au_fname=@firstname AND au_Iname=@lastname
2 设计思路及分析
2.1 存储过程转换设计
存储转换的具体设计中转换的前端部分较之程序设计语言编译程序的前端不尽相同,其主要的意义是借助于对Transact-SQL存储过程源程序的分析,从当中获得具体的语义,再转而用中间结构的形式来将其表达出来。后续部分则是依照中间结构进行目标程序的编写,并且目标程序的应与源程序之间使用同一语义。转换之前为了方便获取存储过程的源程序,需在相关数据库之中得到源数据,以实现存储过程源程序文本的最终获取。实施转换的前期我们要保证依托于源程序的数据库对象已经完成了自身向目标数据库的迁移。整体的存储转换是由一系列的功能模块所构成,功能模块相互间的协作与联系如图l所示。
2.2 词法及语法分析
在存储转换过程中的词法分析又被称之为扫描,其所实现的主要功能全部都可以被语法分析模块进行调用,同时也可作为多遍扫描的第l遍独立运行,词法分析主要主要的功能是针对存储过程源程序进行解析。借助于对源程序中每一个字符的读取,遵照相关规则表达式使它们组合成具有特殊意义的单词,所组合成的单词被称为存储过程源程序的最小有意义语言单位。源程序的最小有意义语言单位可以细分为标志符和关键字、分隔符、常量、注释等。
源程序的语法分析也可以称做是解析,其主要是按照Transact-SQL的上下文无关文法进行相关语句的分析,在进行分析的过程中还会在调用的基础上形成中间结构功能代码,也就是进行源程序分析的同时把所会用到的相关信息植入到中间结构中来,与此同时将所生成的中间结构发送给解释模块进行解释。存储转换过程自始至终都由语法分析进行控制,可将这种转换方法称为语法制导转换。
3 结语
通过对SQLServer2000到Oracle11G存储过程转换技术的测试发现,其可自动进行转换占到整体部分的百分之九十,相信随着相关转换技术的不断发展,在不久的将来势必会实现两者之间百分之百的自动转换。
参考文献
[1]徐峰,杨波,柳华霞.用JavaBaen实现对数据库存储过程的替代[J].济南大学学报,2004(l):61-62.
[2]张金,段希永,陈卓宁.异种数据库存储过程转换技术研究[J].计算机系统应用,2004(12):43-44.