提问人:Bollinez 提问时间:11/14/2023 最后编辑:Bollinez 更新时间:11/15/2023 访问量:23
程序的苍白/浅色图标是什么意思?
What does the pale / light icon of the procedure mean?
问:
我在Oracle SQL Developer中编译了一个包,我的一些过程有一个相当苍白/浅色的图标(不允许我添加图片)。我不太熟悉 Oracle SQL Developer,四处搜索,但找不到所有符号的任何列表或图例。当程序具有浅色图标而不是颜色清晰的图标时,这意味着什么?
已检查帮助中心并将鼠标悬停在图标上,但没有提供任何有用的信息。其他堆栈溢出问题仅解释绿点/错误图标的含义。
答:
3赞
Alex Poole
11/14/2023
#1
如果您正在查看对象查看器,则私有过程(和函数)的图标比公共过程(和函数)更苍白。
公共过程和函数是在包规范中声明,然后在包主体中定义的过程和函数。您可以从包外部调用它们。
私有过程和函数仅在包体中声明和定义,不会出现在规范中。这些 cal 只能从包内部调用,而不是从包外部调用。
举个简单的例子,如果我创建一个虚拟包:
create or replace package test_package as
procedure public_procedure;
end test_package;
/
create or replace package body test_package as
-- forward declaration of private procedure
procedure private_procedure;
-- public (declared in specification) so visible externally
procedure public_procedure is
begin
private_procedure;
end public_procedure;
-- private so not visible externally
procedure private_procedure is
begin
null;
end private_procedure;
end test_package;
/
然后,对象查看器在规范和主体中都显示带有“普通”图标的公共过程,并将私有函数声明和定义显示为较浅的图标,并且仅在主体中显示:
(您通常根本不需要声明私有过程,但如果定义出现在包正文中的第一次调用之后,则需要声明私有过程,因此我这样设置了我的代码,以演示两者都以苍白的图标显示。
我可以从匿名块调用公共过程:
exec test_package.public_procedure;
PL/SQL procedure successfully completed.
并且尝试调用私有的失败按预期失败:
exec test_package.private_procedure;
BEGIN test_package.private_procedure; END;
Error report -
ORA-06550: line 1, column 20:
PLS-00302: component 'PRIVATE_PROCEDURE' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
评论
0赞
Bollinez
11/15/2023
太棒了,谢谢!!这也解释了我的另一个问题:我想知道为什么我不能使用其他软件包中包含的某些过程。交叉检查了您的答案,事实上,所有较苍白的答案都没有在包规范中声明。
评论