暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

QianBase TP的Package插件:如何更好的兼容Oracle数据库

288

QianBase TP是一个轻量级快速部署、方便易用的集中式数据库,对Oracle语法具有极大的兼容能力,兼容Oracle数据类型、触发器、存储过程,提供异构数据库一键迁移工具,方便快速替换传统数据库。那么下面我们来介绍一下,QianBase TP是如何做到更好地兼容Oracle数据类。

01
文章内容预览

本文主要从以下五个方面进行介绍:

  • 第一章:设计文章的组织架构及安排。

  • 第二章:论述研发Package插件的背景及意义,以及文章整体的架构。

  • 第三章:描述Package插件的作用以及详细的使用方式。

  • 第四章:QianBase TP兼容Package插件的支持情况。

  • 第五章:对Package插件做一个总结以及后续的一些展望。

02
研发背景

因国际环境的变化,国产化进程进一步加快,金融行业掀起了国产化替代的浪潮,但由于国内应用主要以国外数据库Oracle为主,特别是金融领域对其的一系列特性的应用较为广泛,而国产数据库在Oracle兼容方面还存在一定差距,因此核心系统的国产化推进较为缓慢。为了加快进度,以及满足大多数用户对QianBase TP可以兼容Oracle数据库的某些特性的希望,我们增加了一系列的兼容特性,本文档所介绍的Package插件便是我们兼容的成果之一。

03
插件相关内容
Package插件介绍



Package是由一组相关的存储过程(Procedure)、函数(Function)、数据类型、常量、变量、游标、异常等PL/SQL程序设计元素的组合,Package具有面向对象设计的概念,使用模块化的思想,用于分类管理数据库中的存储过程和函数等元素,类似于C、Java中类(class)的概念。


Package的组成:Package由两部分组成,分别是包头(Package)和包体(Package body)。


包头(Package)部分是创建包的规范说明,创建者可以在包头里面声明存储过程、函数、数据类型、变量等元素,这一部分内容对用户来说相当于透明的接口,其中存储过程和函数只是进行声明,并未实现具体的功能,在包头里面我们只能了解到这个包具有哪些功能,若要进行调用则需要在包体内实现与之对应的功能后才可以,而数据类型、常量、变量、游标等元素则是在包头里声明后既可以进行调用,这些元素的作用域为整个会话。


包体(Package body)则是包头定义部分的具体实现,包体的主要内容就是实现在包头里面声明的存储过程和函数,在实现的过程中有两点特性需要指出:第一点是私有元素的声明,我们可以在包体内继续声明类似的元素,比如存储过程、函数、变量等,这些被称之为私有元素,它们的作用域仅限于在该包体内使用;第二点就是局部元素的声明:局部元素是在存储过程和函数中声明的元素,这种元素的作用域仅限于声明它的存储过程或者函数。


在创建Package时需要注意的是先创建包头,然后才能创建包体,若是顺序颠倒则会导致创建失败。


与包头对应的包体创建成功后则代表着这个Package已经存在于我们的数据库中,可以使用该Package进行相应的操作,完成一些工作,使用Package将一组存储过程和函数进行封装,便于管理且不容易出错,目前在QianBase TP中存在的Package有DBMS_JOB、DBMS_SQL、UTL_FILE等会在后续文章中进行介绍。



下面会演示Package的使用方式,从创建Package、调用Package、删除Package、权限控制四个方面着手进行。

package插件使用方式



Package插件是在QianBase TP 15.0版本才兼容的,所以下面的演示部分是基于QianBase TP 15版本来进行的,具体版本信息如图2-1所示:

图3-1 数据库版本示意图

创建包头:

创建包头语法流程图:

plsql_package_source:


创建包头语法:



创建包头:在下述创建包头的代码中,分别声明了数据类型:TableRec、整型变量:x、变量:y、游标:FUN_RESULT、函数:tfun以及子程序存储过程:tpro。


创建包体:


创建包体语法流程图:



plsql_package_body_source:



创建包体语法:



创建包体:在下述的创建包体的代码中定义了游标c,以及实现了包头中声明的函数tfunc以及存储过程tpro。



1.调用Package

由于Package中的元素以作用域的范围可分为三类:公共元素、私有元素、局部元素,因此在调用package的演示上便以这三个点进行。


1.1调用Package中的公共元素:

在下面的例子中,在包体中实现包头中声明的存储过程ins_table时,调用了包头中声明的数据类型TableRec。



1.2调用Package中的私有元素

在下面的例子中,在包体中实现包头中声明的存储过程print_info时,调用了包体中声明的私有变量:test1。



1.3调用Package中的局部元素:

在下面的例子中,在包体中实现包头中声明的存储过程print_info时,调用了存储过程中声明的局部变量:c。



2.删除Package

可以创建Package自然也可以删除Package,当某一个Package没有存在的必要时,可以对其进行删除,删除Package所用的关键字为DROP。

在删除Package时需要注意的是:当删除包头时,包体也会自动删除,但若是删除了包体,包头是仍然存在的,也就是说若想删除一个完整的Package有两种方式.

第一种方式为:

DROP PACKAGE PACKAGE_NAME;

第二种方式为:

DROP PACKAGE BODY PACKAGE_NAME; 

DROP PACKAGE PACKAGE_NAME;

下面的例子中演示了正确的删除Package的流程。



需要注意的是在QianBase TP中拥有删除多个Package的功能,这一点是我们独有的,具体的语法为:



3.权限控制:

权限控制体现在数据库的安全方面,在未经授权的用户会话上无法操作除用户本身拥有的Package

具体例子如下所示:


04
Package插件的支持情况

QianBase TP中Package插件的兼容程度达到了80%以上,覆盖了Package的基本功能点及大部分较复杂点,可以很好的满足客户需求,同时也具有一些自身独有特性,比如可以同时删除多个Package

05
总结与展望

总体来说,Package插件兼容是成功的,目前的状态可以满足客户的需求,未来会根据用户需求,进一步提升Package插件的兼容性。

党的二十大报告指出,教育、科技、人才是全面建设社会主义现代化国家的基础性、战略性支撑。必须坚持科技是第一生产力、人才是第一资源、创新是第一动力。加快建设网络强国和数字中国。贵州易鲸捷信息技术有限公司连日来深入学习党的二十大精神,将其贯彻至具体生产工作中,凝心聚力攻克科技技术难关,为我党实现第二个百年奋斗目标奋勇前进。


END



往期精彩回顾

QianBase MPP数据库:如何基于图形化OM服务快速部署

贵州省女科技工作者协会成立 易鲸捷李静当选协会首届副会长

王燮元:基于易鲸捷分布式2.0数据库的银行核心交易系统落地实践

易鲸捷简介

易鲸捷公司成立于2015年,专注于新一代融合型分布式数据库核心技术研发。公司核心团队源自天腾公司,曾创造过NonStopSQL等全球领先的数据库产品,核心技术完全自主可控。经过多年技术沉淀,易鲸捷已形成自主可控、国产可信、安全高效的三条完整分布式数据库产品线:QianBase xTP/QianBase TP/QianBase MPP,可面向不同行业应用提供完整的一站式解决方案,在金融、运营商、智能制造、5G等重点行业获得广泛应用。

网址www.esgyn.cn


贵州易鲸捷信息技术有限公司

地址:贵阳市高新区长岭南路160号高科1号C座24楼

北京易鲸捷信息技术有限公司

地址:北京市朝阳区大屯街道北苑路万科时代中心奥林A座10层

上海易鲸捷信息技术有限公司

地址:上海市浦东新区金科路2889弄1号长泰广场A座6层03单元

北京010-84983409

上海021-50822117

邮箱info@esgyn.cn

网址www.esgyn.cn


最后修改时间:2023-03-17 11:24:34
文章转载自易鲸捷大数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论