过程检查设置参数(PL/SQL、ORACLE)

过程检查设置参数(PL/SQL、ORACLE),oracle,debugging,plsql,package,oracle12c,Oracle,Debugging,Plsql,Package,Oracle12c,在包中,我有两个设置全局变量的过程,示例如下: ... PROCEDURE setA (pp IN VARCHAR2) IS BEGIN global_vName := pp; END; PROCEDURE setB (qq IN VARCHAR2) IS BEGIN global_vColor := qq; END; FUNCTION getA RETURN VARCHAR2 IS BEGIN RETURN global_vName; END; FUNCT

在包中,我有两个设置全局变量的过程,示例如下:

...
 PROCEDURE setA (pp IN VARCHAR2)
    IS BEGIN global_vName := pp; END;

 PROCEDURE setB (qq IN VARCHAR2)
    IS BEGIN global_vColor := qq; END;

 FUNCTION getA RETURN VARCHAR2
    IS BEGIN RETURN global_vName; END;

 FUNCTION getB RETURN VARCHAR2
    IS BEGIN RETURN global_vColor; END;
...
现在在PL/SQL块中,我正在测试它们是否正常工作:

Begin
 mypack.setA('NameA');
 mypack.setB('ColorB');
End;
如何编写一个过程来检查是否设置了
global\u vName
global\u vColor

若为空,则过程应返回异常。请帮忙。

你是说这个吗

FUNCTION getA RETURN VARCHAR2 IS 
BEGIN 
   IF global_vName IS NULL THEN
      RAISE NO_DATA_FOUND;
   END IF;
   RETURN global_vName; 
END;

end
语句之后不可能执行某些代码-如果需要额外检查,应该显式编写它。据我所知,您希望确保始终初始化全局变量,因此可以使用包初始化:

create or replace package body mypack as 

 PROCEDURE setA (pp IN VARCHAR2)
    IS BEGIN global_vName := pp; END;

 PROCEDURE setB (qq IN VARCHAR2)
    IS BEGIN global_vColor := qq; END;

 FUNCTION getA RETURN VARCHAR2
    IS BEGIN RETURN global_vName; END;

 FUNCTION getB RETURN VARCHAR2
    IS BEGIN RETURN global_vColor; END;

< here are your other functions and procedures >

begin
  -- here is an initialization section
  setA('NameA');
  setB('ColorB');
end mypack;
创建或替换包体mypack作为
程序setA(VARCHAR2中的pp)
是BEGIN global_vName:=pp;结束;
程序setB(VARCHAR2中的qq)
是开始全局颜色:=qq;结束;
函数getA RETURN VARCHAR2
是开始返回全局_vName;结束;
函数getB RETURN VARCHAR2
是开始返回全局颜色;结束;
<以下是您的其他功能和程序>
开始
--这里是初始化部分
刚毛(‘名称’);
setB(“ColorB”);
结束mypack;

在第一个用户调用包(函数、过程、游标、变量等)之前,Oracle将自动执行初始化部分。因此,您可以确保变量始终处于初始化状态。

您需要在哪一时刻进行检查?您需要引发哪种类型的异常(标准/用户定义)?结束->之后,如果有人使用软件包,比如说忘记设置一个变量,那么应该是一些消息?我是否可以以某种方式执行此函数几次以检查所有变量?您希望实现什么?你的整个设计看起来有点奇怪。注意,PL/SQL通常意味着“结构化编程”,而不是“面向对象编程”。我认为将OOP强加给PL/SQL不是一个好主意。如果您从pack运行我的一个过程,并且它需要setA或setB,那么该过程应该返回缺少SET的内容,引发异常这是一个简单的异常处理-你的问题是什么?我不知道是否需要执行简单的if语句,或者是否有其他规则来执行所有设置都在包外完成,例如:我将设置一个setA,setB…然后运行其他过程,如果你没有设置一个setA或setB,它将不会运行,但是应该引起一个例外,比如失踪setA@4est使用逻辑定义初始值,并在初始化部分实现它。