我是一名前Java开发人员,使用Oracle的SQL-Developer创建Oracle“软件包”。
Oracle的网站表明,可以创建一个Oracle“软件包”,其中某些对象(变量,函数,过程)可以在软件包范围之外“访问”,而其他对象只能在软件包“内部”访问。 / p>
即,我正在尝试做类似这样的事情(伪代码!),它有意地但表面上类似于Java。
所以,我问,“如何实现与Oracle PL SQL包中的(java)PUBLIC和PRIVATE类似的功能”? (“参见'Oracle关键字'足以指出我正确的方向。)
提前致谢!
CREATE PACKAGE a
// header
**PUBLIC** NUMBER nVisibleOutside := 1;
**PRIVATE** NUMBER nNOTVisibleOutside := 14922016;
PUBLIC PROCEDURE pVisibleOutside ();
PUBLIC FUNCTION fNOTVisibleOutside();
/* other stuff */
// body
/* actual code of pVisibleOutside and fNOTVisibleOutside(); */
END a;
答案 0 :(得分:0)
Oracle使用包规范和包体。实际上,规范定义您希望其他代码区域(例如,另一个包)可以访问的所有过程/函数/变量/等。然后,正文包含其他程序和功能的定义,这些程序和功能是"私人"以及包规范中定义背后的逻辑。
您在上面提供的示例如下:
CREATE OR REPLACE PACKAGE XX_EXAMPLE_PACKAGE AS
-- Variable that is visible to any code
n_visible_outside NUMBER := 1;
-- Procedure that is visible to any code
PROCEDURE p_visible_outside ( );
END XX_PACKAGE_SPECIFICATION;
/
CREATE OR REPLACE PACKAGE BODY XX_EXAMPLE_PACKAGE AS
-- A variable that is visible to the whole package body but not
-- to external code
v_dummy VARCHAR2(100);
-- Procedure visible to any code through the specification
PROCEDURE p_visible_outside AS
-- declaring a variable that is only visible to this procedure
n_not_visible_outside NUMBER := 14922016;
BEGIN
-- Logic
END p_visible_outside;
-- Function not visible outside as not declared in specification
-- can be accessed by code within this package
FUNCTION f_not_visible_outside RETURN BOOLEAN IS
--Logic
END f_not_visible_outside;
END;
/
然后你可以打电话给"可见"从另一个包中以这种方式过程:
XX_EXAMPLE_PACKAGE.p_visible_outside;
同样地,你可以打电话给"可见"来自另一个包的全局变量:
-- You could use this in your code as say, a parameter
XX_EXAMPLE_PACKAGE.n_visible_outside;
-- You could assign the value to another variable in your code
v_dummy := XX_EXAMPLE_PACKAGE.n_visible_outside;
作为初学者,遵循开发标准并不重要,但是,将来你应该这样做。希望您有一些本地开发标准,但是您可能会在谷歌的某处找到一些Oracle PL / SQL标准。