Closed. This question is not reproducible or was caused by typos。它当前不接受答案。












想改善这个问题吗?更新问题,以使为on-topic

5年前关闭。



Improve this question





尝试创建一个将执行计算的程序包:一个过程包含一个带数字的变量,然后我将与变量一起调用该程序包,然后进行计算并打印出来。但是我得到“ my_pkg是无效的”和“没有其规范不能编译的主体”
任何输入都非常欢迎

create or replace package my_pkg as
Procedure do_calc(v_add number);
v_sum number;
v_number number;
end my_pkg;
/

create or replace package body my_pkg as
Procedure do_calc (v_add number) is
v_sum number;
v_number number;
begin
v_number := 10;
v_sum := v_number + v_add;
dbms_output.put_line('sum is: '||v_sum);
end do_calc;
end my_pkg;
/

最佳答案

我删除了您在包中声明的变量,因为它们不是必需的。您可以在程序包中声明在过程中使用的变量,但是对于在程序包上执行的任何人来说,它们都是全局变量。另外,作为一个提示,不要在同一个程序包中声明具有相同名称且在不同范围内的变量,这会使调试变得困难。

create or replace package my_pkg as
Procedure do_calc(v_add_in number IN);
--v_sum number;  --you don't need these, they are internal package variables
--v_number number;
end my_pkg;
/

create or replace package body my_pkg as
Procedure do_calc (v_add_in number IN) is
v_sum number;
v_number number;
begin
v_number := 10;
v_sum := v_number + v_add;
dbms_output.put_line('sum is: '||v_sum);
end do_calc;
end my_pkg;
/

08-06 22:08