如何实现PLSQL程序重载包

时间:2018-05-10 12:24:43

标签: plsql

我有一个用例,其中包有2个具有相同名称和参数的过程,一个为CHAR类型,另一个为VARCHAR2类型。

如何拨打tham?

1 个答案:

答案 0 :(得分:0)

对于PL / SQL,包规范和正文编译好了。

但是在运行时,2个过程是相同的,没有办法区分,因为CHAR类型和VARCHAR2类型具有相同的数据类型族。

例如:

create or replace package pk_over
is
  procedure pr_text(p_isbCaracter char);

  procedure pr_text(p_isbCaracter  varchar2);
End;



create or replace package body pk_over
is
  procedure pr_text(p_isbCaracter char)
  is
  Begin
    Dbms_Output.Put_Line('Soy PR_TEXT parámetro CHAR="'||p_isbCaracter||chr(34));
  End pr_text;
  --
  procedure pr_text(p_isbCaracter  varchar2)
  is
  Begin
    Dbms_Output.Put_Line('Soy PR_TEXT parámetro VARCHAR2="'||p_isbCaracter||chr(34));
  End pr_text;
  --
End pk_over;

你打电话给:

Declare
  sbVar2    varchar2(20);
Begin
  sbVar2:='Texto 1';
  pk_over.pr_text(sbVar2);
End;

运行时的错误是:

  

PLS-00307:“PR_TEXT”的声明太多与此次电话匹配

所以你不需要2个程序,只需要一个。