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.