Oracle"特色"——常量/变量充当函数入参默认值

15天前 19.8k 0

本文为新专栏《那些让人感到"匪夷所思"或者说是让人摸不着头脑的Oracle"特色"设计》第三篇文章,

旨在分享和吐槽,作为羲和(Halo)数据库内核研发在实现Oracle兼容的时候,碰见过的奇奇怪怪的Oracle"特色"。

今天的主题是《Oracle"特色"——同学,你能接受常量/变量充当函数入参默认值吗?》。

诚如今天的主题所言:"同学,你能接受常量/变量充当函数入参默认值吗?"

在PL/SQL中,函数入参默认值不就是输入参数类型后面的DEFAULT,就好比示例中的256,通常来说都是一个写定了的数据值。

在已提供默认值的基础上,当去调用该函数或存储过程时,可以不在输出对应参数。

CREATE PROCEDURE test_proc(va INTEGER DEFAULT 256)
AS
BEGIN
DBMS_OUTPUT.PUT_LINE('va = '|| va);
END;
/

那常量/变量又是啥?如果对Oracle的Package比较了解的话,这块指的常量/变量,其实就是Package中的常量/变量。

难不成?

没错,正如你所想,在Oracle数据库中,它还真就支持你这样子去定义一个新的函数/存储过程。

所以我也是想吐槽:"还得是Oracle你这个浓眉大眼的家伙,这俩玩意也能给整到一起去!真正意义上的给我整活,咱还得老老实实的给它兼容了"。

接下来让我们回到今天的主题,看看在Oracle数据中,常量/变量充当函数入参默认值到底是个什么样子的情况?

一、Oracle数据库之于常量/变量充当函数入参默认值

接下来让我们看看这二者在Oracle数据库中是如何结合在一起的。

创建Package

Package中存在一个名为v_var的变量无默认数据、定义一个名为v_var2的常量,默认值为9527,

以及一个名为test_proc的声明,它的入参的默认值分别为Package中的常量和变量

Oracle"特色"——常量/变量充当函数入参默认值-1

创建Package Body

将Package声明的存储过程进行实现,该存储过程将打印输入进来的参数数据值。

Oracle"特色"——常量/变量充当函数入参默认值-2

在调用该存储过程前,我们有必要了解了解Package的常量/变量。

在Oracle数据中,对于Package中的常量/变量均为会话级别,常量不允许被修改,变量允许被修改。

如果当前对变量进行了修改,当此会话退出之后,之前的修改不被保存。

比如说,此处尝试修改Package中的常量v_var2,将其修改成9528。将会触发下方报错

Oracle"特色"——常量/变量充当函数入参默认值-3

比如说,此处修改Package中的变量v_var,打印之后,退出重新登录,再次打印。

Oracle"特色"——常量/变量充当函数入参默认值-4

好好好,接下来让我们回到调用刚刚实现的那个存储过程上来。

这个时候,我们去调用test_pkg.test_proc的话,由于变量没有赋值过,所以结果如图所示:

Oracle"特色"——常量/变量充当函数入参默认值-5

叫上我们的华安老兄,再次调用

Oracle"特色"——常量/变量充当函数入参默认值-6

就可以看到华安了

Oracle"特色"——常量/变量充当函数入参默认值-7

当然还可以此处也仅仅是演示了简单类型,其实也可以结合复合类型玩玩,比如说:

Oracle"特色"——常量/变量充当函数入参默认值-8

二、羲和(Halo)数据库在这方面的表现

1、创建Package/Package body操作

2、修改常量/变量数据操作

Oracle"特色"——常量/变量充当函数入参默认值-9

3、呼叫迷途小书僮华安操作

Oracle"特色"——常量/变量充当函数入参默认值-10

龙吟虎啸小书僮

Oracle"特色"——常量/变量充当函数入参默认值-11

4、测试复合类型

Oracle"特色"——常量/变量充当函数入参默认值-12

三、声明

本文为此系列第三篇,如想看到对Oracle功能的吐槽,敬请期待。

若文中存在错误或不当之处,敬请指出,以便我进行修正和完善。希望这篇文章能够帮助到各位。

文章转载请联系,谢谢合作。

细心的朋友们可能注意到了,我的版本是羲和(Halo)16版本,其实我的是内部的开发版本,而真正的16版本其实还未推出,

不过我们预计这个月底、下个月初推出羲和(Halo)16(Technical Preview)版本,敬请期待。

如想体验本文中的功能,后续14版本或者也可以到时候16版本见。

欢迎大家加入羲和(Halo)产品吐槽群。

Oracle"特色"——常量/变量充当函数入参默认值-13

相关文章

最新发布!MySQL 9.0 的向量 (VECTOR) 类型文档更新
国产数据库中级认证HCIP-openGauss经验分享
保障数据完整性与稳定性:数据库一致性
OceanBase 里的 DDL 超时时间
OceanBase v3.1.x 将不再更新版本 | 社区月报2024.6
openGauss Developer Day 2024 | SIG组工作会议亮点回看!

发布评论