gpt4 book ai didi

oracle - 太多的声明

转载 作者:行者123 更新时间:2023-12-05 00:53:19 26 4
gpt4 key购买 nike

运行以下代码时,我收到以下错误消息。我是 pl/sql (oracle) 编码世界的新手,我请求您的帮助。

代码:

create or replace package learn is 
function Area(i_rad NUMBER) return NUMBER;
function Area(i_length NUMBER, i_width NUMBER:=3) return NUMBER;
end;
/

包体:
create or replace package body learn is 
function Area(i_rad NUMBER) return NUMBER
is
v_pi NUMBER:=3.14;
v number:=to_number(i_rad);
begin
return v_pi * (i_rad ** 2);
end;
function Area(i_length NUMBER, i_width NUMBER:=3) return NUMBER
is
begin
return i_length * i_width;
end;
end learn;

plsql 块
declare
x number(2):=2;
y number(2):=5;
begin
DBMS_OUTPUT.put_line('Area (R=3):'||learn.Area(x));
DBMS_OUTPUT.put_line('Area (R=3):'||learn.Area(x,y));
end;

错误消息:太多的“AREA”声明与此调用匹配

最佳答案

那是因为您的两个参数函数中的第二个参数具有默认值。如果您只提供参数,则第二个函数将假定第二个值是 3,现在有两个函数可以调用,因此调用失败。

我建议你不要做这种重载,因为不清楚哪个函数做什么。

如果您仍然想这样做,一种方法是强制第二个参数并在您没有​​任何值要传递时传递 null。

create or replace package learn is
function Area(i_rad NUMBER) return NUMBER;
function Area(i_length NUMBER, i_width NUMBER) return NUMBER;
end;
/

create or replace package body learn is
function Area(i_rad NUMBER) return NUMBER
is
v_pi NUMBER:=3.14;
v number:=to_number(i_rad);
begin
return v_pi * (i_rad ** 2);
end;
function Area(i_length NUMBER, i_width NUMBER) return NUMBER
is
begin
return i_length * nvl(i_width,3);
end;
end learn;
/

declare
x number(2):=2;
y number(2):=5;
begin
DBMS_OUTPUT.put_line('Area (R=3):'||learn.Area(x));
DBMS_OUTPUT.put_line('Area (R=3):'||learn.Area(x,y));
end;
/

如果您有不同的参数名称,您可以这样做:
declare
x number(2):=2;
y number(2):=5;
begin
DBMS_OUTPUT.put_line('Area (R=3):'||learn.Area(i_rad => x));
DBMS_OUTPUT.put_line('Area (R=3):'||learn.Area(x,y));
end;
/

关于oracle - 太多的声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41512313/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com