Oracle"特色"——常量/变量充当函数入参默认值
本文为新专栏《那些让人感到"匪夷所思"或者说是让人摸不着头脑的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;
/
创建Package
Package中存在一个名为v_var的变量无默认数据、定义一个名为v_var2的常量,默认值为9527,
以及一个名为test_proc的声明,它的入参的默认值分别为Package中的常量和变量
创建Package Body
将Package声明的存储过程进行实现,该存储过程将打印输入进来的参数数据值。
在调用该存储过程前,我们有必要了解了解Package的常量/变量。
在Oracle数据中,对于Package中的常量/变量均为会话级别,常量不允许被修改,变量允许被修改。
如果当前对变量进行了修改,当此会话退出之后,之前的修改不被保存。
比如说,此处尝试修改Package中的常量v_var2,将其修改成9528。将会触发下方报错
比如说,此处修改Package中的变量v_var,打印之后,退出重新登录,再次打印。
好好好,接下来让我们回到调用刚刚实现的那个存储过程上来。
这个时候,我们去调用test_pkg.test_proc的话,由于变量没有赋值过,所以结果如图所示:
叫上我们的华安老兄,再次调用
就可以看到华安了
当然还可以此处也仅仅是演示了简单类型,其实也可以结合复合类型玩玩,比如说:
2、修改常量/变量数据操作
3、呼叫迷途小书僮华安操作
龙吟虎啸小书僮
4、测试复合类型