MogDB/openGauss 数据库 package 关键字的两种用法

本文出处:https://www.modb.pro/db/237701

package 关键字在 MogDB 数据库里有两种用法:

package 包,分为 Package Specification 和 Package Body。 注意:需要在 Oracle 兼容下(dbcompatibility=‘A’)

package 属性,用于存储过程重载。

下面演示这两种用法。

一、package 包

创建一个员工表

create table emp(

empno bigserial,

name varchar,

job varchar,

mgr numeric,

hiredate timestamp without time zone,

sal numeric,

comm numeric,

deptno numeric

);

创建 package 包接口,用于客户端接口调用

create package employee_management as

c_empno numeric = 9999;

function hire_emp (name varchar, job varchar,

mgr numeric, hiredate timestamp,

sal numeric, comm numeric,

deptno numeric) return numeric;

procedure fire_emp (emp_id numeric);

end employee_management;

/

创建 package body 包实现,可用于后端修改

create package body employee_management as

function hire_emp (name varchar, job varchar,

mgr numeric, hiredate timestamp, sal numeric,

comm numeric, deptno numeric)

return numeric as

declare

new_empno numeric;

begin

select nextval('emp_empno_seq') into new_empno;

insert into emp values (new_empno, name, job,

mgr,hiredate, sal, comm, deptno);

return new_empno;

end;

procedure fire_emp(emp_id in number)
as
begin
delete from emp where empno = emp_id;
end;

end employee_management;

/

接下来我们可以通过员工管理接口来进行调用,命令如下。

call employee_management.hire_emp('tom','teacher',1,localtimestamp,1,1,1);

通过上面示例,我们可以看到第一种用法,创建 package 包接口,里面可以创建不同的程序体,包括变量、函数、存储过程等。

二、package 属性

PostgreSQL 测试

首先我们来看 PG 数据库里的这个测试

create or replace procedure myproc(

in p1 varchar,

in p2 varchar,

out p3 varchar)

as $$

begin

p3 = p1;

raise notice 'procedure parameter: %', p1 ;

end ;

$$

language plpgsql;

create or replace procedure myproc(

in p1 varchar,

in p2 varchar)

as $$

begin

raise notice 'procedure parameter: %', p1 ;

end ;

$$

language plpgsql;

第二个同名的 myproc 存储过程创建会失败,提示信息如下:

ERROR: cannot change whether a procedure has output parameters HINT: Use DROP PROCEDURE myproc(character varying,character varying) first.

测试截图如下

上面的测试在 MogDB 数据库里也是同样的效果,不能通过输出参数来对存储过程进行重载,上面第一个 myproc 是有输出参数,第二个 myproc 没有输出参数。

MogDB 测试

接下来我们在 MogDB 数据库里,不使用 out 输出参数,但我们改变 in 输入参数的类型,测试重载。

create or replace procedure myproc2(

in p1 varchar,

in p2 varchar)

as

begin

raise notice 'procedure parameter: %', p1 ;

end ;

/

create or replace procedure myproc2(

in p1 integer,

in p2 integer)

as

begin

raise notice 'procedure parameter: %', p1 ;

end ;

/

最终我们的结果是只能看到最后一个两个输入参数为 integer 类型的 myproc2,截图如下。

接下面我们对第一个输入参数为 varchar 类型的 myproc2 使用 package 属性进行重载(加到 as 关键字前面)

create or replace procedure myproc2(

in p1 varchar,

in p2 varchar)

package as

begin

raise notice 'procedure parameter: %', p1 ;

end ;

/

可以看到下面的提示:

ERROR: Do not allow package function overload not package function.

可以看出我们不能使用后加 package 属性的 myproc2(输入参数类型为 varchar)去重载非 package 属性的 myproc2(输入参数类型为 integer)。

最后测试正确的示例:

create or replace procedure myproc3(

in p1 varchar,

in p2 varchar)

package as

begin

raise notice 'procedure parameter: %', p1 ;

end ;

/

create or replace procedure myproc3(

in p1 integer,

in p2 integer)

package as

begin

raise notice 'procedure parameter: %', p1 ;

end ;

/

下面的截图可以看到符合我们的预期。

三、结论

MogDB 数据库里 package 关键字有两种用法,一种是 package 包,另一种 package 属性用于存储过程重载。函数的重载不需要使用 package 属性,存储过程重载需要显式使用 package 属性。

MogDB/openGauss数据库package关键字的两种用法的更多相关文章

  1. [整理] C#调用SQLDMO.DLL时间数据库备份 / 还原。 (香神无涯) // C#实现SQLSERVER2000数据库备份还原的两种方法 (带进度条)

    /// <summary>/// 通过调用MSSQL的SQLDMO.DLL文件来实现备份数据库/// 1.首先在在项目中引用SQLDMO.DLL文件./// 2.在引用中的SQLDMO.D ...

  2. c++ operator操作符的两种用法:重载和隐式类型转换,string转其他基本数据类型的简洁实现string_cast

    C++中的operator主要有两个作用,一是操作符的重载,一是自定义对象类型的隐式转换.对于操作符的重载,许多人都不陌生,但是估计不少人都不太熟悉operator的第二种用法,即自定义对象类型的隐式 ...

  3. Service的两种用法及其生命周期

    先来一点基础知识: Service 是android的四大组件之一,与Activity同属于一个级别,它是运行在后台进行服务的组件(例如在后台播放的音乐,播放音乐的同时并不影响其他操作).Servic ...

  4. .NET(c#)new关键字的三种用法

    前几天去家公司面试,有一道这样的题:写出c#中new关键字的三种用法,思前想后挖空心思也只想出了两种用法,回来查了下msdn,还真是有第三种用法:用于在泛型声明中约束可能用作类型参数的参数的类型,这是 ...

  5. NEW关键字的三种用法

    最近面试中有一道题是写new关键字的几种用法,想了下写下我知道的两种用法 第一种 创建对象.调用构造函数,这就不用讲了 ClassA  A=new ClassA(); 第二种 是作为修饰符,显示隐藏继 ...

  6. 【转载】java final 关键字的几种用法

    原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...

  7. [java]final关键字的几种用法

    在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们来了解一下final ...

  8. final关键字的几种用法

    在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们来了解一下final ...

  9. Comparable和Comparator的区别&Collections.sort的两种用法

    在Java集合的学习中,我们明白了: 看到tree,可以按顺序进行排列,就要想到两个接口.Comparable(集合中元素实现这个接口,元素自身具备可比性),Comparator(比较器,传入容器构造 ...

  10. operator 的两种用法

    C++,有时它的确是个耐玩的东东,就比如operator,它有两种用法,一种是operator overloading(操作符重载),一种是operator casting(操作隐式转换).1.操作符 ...

随机推荐

  1. Mysql数据库未添加索引引发的生产事故

    最近开发的新功能主要是首页的红点提示功能,某个用户登录系统app,然后进入某一个功能模块, 在该功能下面有很多地方可以操作,新功能就是根据用户信息查询当月是否存在新的数据.总共有四五 个地方如果出现增 ...

  2. 定义pod的hosts文件(HostAliases)

    通过HostAliases 向 Pod /etc/hosts 文件添加条目 当 DNS 配置以及其它选项不合理的时候,通过向 Pod 的 /etc/hosts 文件中添加条目, 可以在 Pod 级别覆 ...

  3. SVN迁移到Git,并同步提交记录

    原文:SVN迁移到Git,并同步提交记录 - Stars-One的杂货小窝 公司的旧项目存放在SVN,现准备迁移到Git,研究了下,简单记录一下从SVN迁移到Git的操作 步骤 1.创建一个空白文件夹 ...

  4. 逆向通达信Level-2 续七 (调试内置WebView)

    通过窗口找WebView,打开DevTool调试 在WebView hack入控制台.那个,我已经打开了DevTool,算了. 通过pad面板找WebView. 逆向通达信Level-2 续十一 (无 ...

  5. 移植openssh-7.5p1(包括openssl-1.0.2l、zlib-1.2.11)到HISI3520d(编译篇)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  6. 大年学习linux(第四节---文件权限)

    四.文件权限 文件类型 Linux文件类型和linux文件的文件名所代表的意义是两个不同的概念.我们通过一般应用程序而创建的比如 file.txt.file.tar.gz ,这些文件虽然要用不同的程序 ...

  7. 巧用Maya轴心操作小技巧,工作事半功倍!

    Maya 是一款专业的三维软件,可以用于创建规模宏大的世界.复杂的角色和炫酷的特效.Maya的用户遍布动画行业.影视特效.广告和片头.平面设计行业,用户数量十分庞大.本文分享了maya轴心操作的小技巧 ...

  8. 首届实时渲染3D动画创作大赛最佳人气奖?你说了算!

    根据评选标准,经过评委组层层选拔,首届实时渲染3D动画创作大赛「最佳人气奖」投票开始啦!!! 本次赛事报名人数达212人,入围作品共40份,其中Omniverse组11份,专业组15份,学生组14份. ...

  9. 关于三维模型OBJ格式轻量化压缩必要性探讨

    关于三维模型OBJ格式轻量化压缩必要性探讨 三维模型的OBJ格式轻量化压缩在当前的计算机图形学和虚拟现实应用中具有重要的必要性.以下是对三维模型OBJ格式轻量化压缩必要性的分析: 1.提高加载和传输效 ...

  10. SQLI-LABS(Less-9、10)

    Less-9(GET-Blind-Time based-Single Quotes) 打开Less-9页面,可以看到页面中间有一句Please input the ID as parameter wi ...