PLSQL包变量参考

时间:2012-11-08 23:08:26

标签: oracle plsql

我有一个调用包Call_Package的函数。在这个包中我有一个过程Validate_Procedure,在这个过程中我有一个变量Entity_Flag。

该函数调用我的包:

BEGIN
Call_Package(<params>);
END

'Call_Package'包含我的程序Validate_Procedure:

Validate_Procedure(<paramA>, <paramB>)

在我做的过程中,像正常一样:

Validate_Procedure(<params>) IS
BEGIN
 IF <paramA> THEN
  Entity_Flag = 1
 Else <paramB> THEN
  Entity_Flag = 2
 END IF
END

我的问题是,我可以在原始函数中引用过程变量,如下所示:

BEGIN
Call_Package(<params>);
IF Call_Package.Validate_Procedure.Entity_Flag = 2 THEN
   {do stuff}
END IF
END

1 个答案:

答案 0 :(得分:2)

首先,您无法调用包。包不是可执行实体。它只是程序,函数,包变量等的集合。

如果Entity_FlagValidate_Procedure程序中的局部变量,则无法从外部Validate_Procedure引用它。在您发布的代码中显示了如何定义Validate_Procedure过程,但是,您没有声明Entity_Flag。这可能是疏忽,也可能表明Entity_Flag根本不是局部变量。也许它是一个包全局变量。如果变量在包规范中定义,则可以在包外引用它,如Call_Package.Entity_Flag。但是,如果在包体中定义了变量,则只能从包体中定义的另一个PL / SQL块中引用它。