oracle pl sql函数重载的语法是啥?
Posted
技术标签:
【中文标题】oracle pl sql函数重载的语法是啥?【英文标题】:what is the syntax for oracle pl sql function overloading?oracle pl sql函数重载的语法是什么? 【发布时间】:2020-09-27 10:48:01 【问题描述】:我正在尝试在 oracle live plsql 中执行函数重载。在我能找到的任何地方,都没有适用于函数重载的基本语法。
使用 1 个参数
create or replace function area(a in number)
return number is
begin
return a*a;
end;
使用2个参数
create or replace function area(a in number, b in number)
return number is
begin
return a*b;
end;
函数在执行后被创建。但是,在函数调用过程中出错。
declare
begin
dbms_output.put_line(area(5));
dbms_output.put_line(area(3, 4));
end;
帮我解决错误并将这段代码构造成函数重载的基本语法。
ORA-06550:第 3 行,第 31 列: PLS-00363:表达式“5”不能用作赋值目标
【问题讨论】:
【参考方案1】:正如documentation 所说:
PL/SQL 允许您重载嵌套子程序、封装子程序和类型方法
与独立存储过程(函数)无关。
因此,如果将这些函数放入一个包中,它会按预期工作:
SQL> create or replace package pkg_test as
2 function area (a in number) return number;
3 function area (a in number, b in number) return number;
4 end;
5 /
Package created.
SQL> create or replace package body pkg_test as
2 function area(a in number)
3 return number is
4 begin
5 return a*a;
6 end;
7 function area(a in number, b in number)
8 return number is
9 begin
10 return a*b;
11 end;
12 end;
13 /
Package body created.
SQL> begin
2 dbms_output.put_line(pkg_test.area(3, 4));
3 dbms_output.put_line(pkg_test.area(5));
4 end;
5 /
12
25
PL/SQL procedure successfully completed.
SQL>
【讨论】:
谢谢@Littlefoot。我在包中尝试了相同的方法并且它有效,但是有没有办法让它在没有包的情况下单独工作。??? 不客气。据我所知,没有。 @Littlefoot,你用哪个编辑器来处理 PL/SQL 代码?看起来不错! 我能理解 :-) @Soumendra:当我没有那么多代码并且没有 TOAD 时(即我不工作时),我就是这样做的。 TOAD 的格式化程序很好地完成了它的工作并且很好地格式化了代码。我在家使用的 GUI 是 SQL Developer,但我不喜欢它格式化代码的方式。有时 - 当有人发布大量未格式化的代码时 - 我会使用一些在线 SQL 格式化程序(没有任何喜欢的;必要时只需谷歌即可)。【参考方案2】:set serveroutput on
declare
function area(a in number,
b in number default null)
return number is
begin
if b is null then
return a*a;
end if;
return a*b;
end area;
begin
dbms_output.put_line(area(5));
dbms_output.put_line(area(3, 4));
end;
HTH。
【讨论】:
以上是关于oracle pl sql函数重载的语法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数