我有一个用例,其中包有2个具有相同名称和参数的过程,一个为CHAR
类型,另一个为VARCHAR2
类型。
如何拨打tham?
答案 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个程序,只需要一个。