关键字:
KingbaseES、PL/SQL、存储过程、函数
一、PL/SQL语言兼容特性
在 PL/SQL 语言方面,KingbaseES 提供了大量的Oracle 兼容特性。这些特性使得大多数的 Oracle 数据库对象和 SQL 语句移植到 KingbaseES 中无需任何转换。
本文主要介绍 KingbaseES 原生支持的 Oracle 兼容特性,并提供了必要的示例说明。
二、PL/SQL语言兼容案例
2.1 记录类型
为降低 Oracle 移植难度,KingbaseES 在自身的 SQL 数据类型基础上扩展了NUMBER类型、VARCHAR2类型、CHAR(n CHAR|BYTE)类型和兼容 Oracle 的DATE类型。不仅如此,在 PL/SQL 中,KingbaseES 还预定义了%TYPE属性、%ROWTYPE属性和RECORD类型。
如下图2-1和2-2 ,KingbaseES和Oracle plsql语法的对比。
执行存储过程:
图2-1 KingbaseES record类型
执行存储过程:
图2-2 Oracle record类型
2.2 集合类型
KingbaseES支持大多数常用的 Oracle PL/SQL 集合类型( COLLECTION 类型 )。在 KingbaseES 中,它们被称为抽象数据类型。
KingbaseES的抽象数据类型有三种:关联数组(Associative Array)、嵌套表(Nested Table)和可变数组(Varray)。它们均为基于键-值对的集合类型。在 Oracle 兼容模式中,KingbaseES 用户可使用这些类型获取或修改集合信息。
如下图2-3和2-4 ,KingbaseES和Oracle plsql语法的对比。
执行存储过程:
图2-3 KingbaseES集合类型
执行存储过程:
图2-4 Oracle集合类型
2.3 基本过程语句
在PL/SQL应用程序中,基本过程语句包括赋值语句和多种SQL语句。这些SQL语句如INSERT、UPDATE、DELETE、SELECT INTO、NULL和EXECUTE IMMEDIATE等。
下面,分别介绍在这些语句上KingbaseES的Oracle兼容情况。
如下图2-5和2-6 ,KingbaseES和Oracle plsql语法的对比。
执行存储过程:
图2-5 KingbaseES基本结构
执行存储过程:
图2-6 Oracle基本结构
2.4 控制流语句
控制流语句是PL/SQL编程中的核心部件。用户使用它们可控制SQL或PL/SQL语句的执行逻辑。
2.4.1 IF语句
用户可通过IF语句条件控制SQL语句的执行逻辑。KingbaseES提供了以下四种方式的IF语句:
IF ... THENIF ... THEN ... ELSEIF ... THEN ... ELSEIFIF ... THEN ... ELSEIF ... THEN ... ELSE
在上述语句上,KingbaseES和Oracle兼容。如下图2-7和2-8 ,KingbaseES和Oracle plsql语法的对比。
执行存储过程:
图2-7 KingbaseE控制结构
执行存储过程:
图2-8 Oracle控制结构
2.4.2 循环语句
在存储过程、函数和匿名块中,可利用循环语句重复执行语句序列。在循环语句上,KingbaseES支持三种类型,即简单LOOP语句、WHILE-LOOP语句和*FOR-LOOP*语句。在这三种类型上,KingbaseES均对Oracle提供了兼容性支持。如下图2-9和2-10 ,KingbaseES和Oracle plsql语法的对比。
图2-9 KingbaseES循环结构
图2-10 Oracle循环结构
2.5 PL/SQL 异常处理
所谓异常处理是指一段用于捕获和处理运行时错误,并被单独封装的 SQL 程序代码。KingbaseES 从语法上支持 Oracle 的大部分系统预定义异常处理功能。此外,KingbaseES 的异常处理方式和 Oracle 也相同,即异常发生后,系统将立即捕获和处理异常。KingaseES的异常处理语法如下所示:
如下图2-11和2-12 ,KingbaseES和Oracle plsql语法的对比。
图2-11 KingbaseES异常处理
图2-12 Oracle异常处理
三、总结
KingbaseES在PL/SQL语法上和Oracle有很多兼容的方面,对Oracle的存储过程平滑迁移到KingbaseES奠定了一个良好的基础。本次文档通过案例做了一些对比,更多的PL/SQL语法兼容性对比,请参考官方文档。
参考文档:
《 Oracle 至 KingbaseES V8R6 迁移最佳实践》
如果觉得《金仓数据库KingbaseES 迁移工具—PL/SQL中Oracle和KingbaseES 的对比》对你有帮助,请点赞、收藏,并留下你的观点哦!