我在 Oracle SQL Developer 中编译了一个包,我的一些程序有一个相当苍白/浅色的图标(不允许我添加图片)。我不太熟悉 Oracle SQL Developer,并用谷歌搜索但找不到所有符号的任何列表或图例。当程序具有浅色图标而不是清晰的彩色图标时,这意味着什么?
查看帮助中心并将鼠标悬停在图标上,但没有提供任何有用的信息。其他堆栈溢出问题仅解释绿点/错误图标的含义。
如果您正在查看对象查看器,则会发现私有过程(和函数)的图标比公共过程(和函数)更浅。
公共过程和函数是在包规范中声明然后在包体中定义的过程和函数。您可以从套餐外调用这些。
私有过程和函数仅在包体中声明和定义,不会出现在规范中。这些 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