0

我有一个调用包 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
4

1 回答 1

2

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

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

于 2012-11-08T23:15:14.370 回答