2012-11-08 58 views
0

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

的函数调用我的包是这样:

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 

回答

2

首先,你不能调用一个包。一个包不是一个可执行的实体。这是一个简单的过程,函数,包变量的集合,等

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

+0

谢谢,我对PLSQL非常陌生,所以我不确定术语,或者确切地说可以做什么。我赞赏解释。我能够达到它,因为它是一个包全局变量,但是,它在包中的几个过程中使用,我只能使用null的初始实例化变量。 – Phoenix