问题描述
我正在尝试在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”不能用作分配目标
解决方法
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>
,
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。