oracle pl sql 函数重载的语法是什么?
what is the syntax for oracle pl sql function overloading?
我正在尝试在 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: line 3, column 31:
PLS-00363: expression '5' cannot be used as an assignment target
正如documentation所说:
PL/SQL lets you overload nested subprograms, package subprograms, and type methods
与独立存储过程(函数)无关。
因此,如果将这些函数放入包中,它会按预期工作:
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.
我正在尝试在 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: line 3, column 31: PLS-00363: expression '5' cannot be used as an assignment target
正如documentation所说:
PL/SQL lets you overload nested subprograms, package subprograms, and type methods
与独立存储过程(函数)无关。
因此,如果将这些函数放入包中,它会按预期工作:
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.