过程检查设置参数(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使用逻辑定义初始值,并在初始化部分实现它。