我在一个包中有几个重载函数。例如:
function my_func(i_val varchar2) return varchar2 is
begin
return '!' || i_val || '!';
end;
function my_func(i_val number) return varchar2 is
begin
return to_char(i_val+1);
end;
只要我们传递 . 以外的值,一切都很好NULL。NULL如果我们提前将它分配给一个变量,我们甚至可以转移。也就是说,代码将起作用:
declare
a number;
b varchar2(32767);
begin
b := my_pkg.my_func(i_val => a);
end;
但是如果我们传递一个 NULL 标量:
declare
b varchar2(32767);
begin
b := my_pkg.my_func(i_val => null);
end;
我们会发现错误:
PLS-00307:与此调用匹配的“MY_FUNC”描述过多
是否有可能以某种方式排除这种情况?例如,显式设置在这种情况下调用哪个函数。
文字
NULL没有特定的数据类型,它是“无”的。在 PL/SQL 中,与 SQL 不同,
NULL默认情况下不会将文字转换为VARCHAR2,因此您必须告诉编译器所指的数据类型。例如明确(推荐):
或者用更短的提示: