过程检查设置参数(PL/SQL、ORACLE)
Posted
技术标签:
【中文标题】过程检查设置参数(PL/SQL、ORACLE)【英文标题】:Procedure checking set up parameters (PL/SQL, ORACLE) 【发布时间】:2018-01-11 12:52:25 【问题描述】:在包中我有几个设置全局变量的过程,示例如下:
...
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_vName
和global_vColor
是否已设置?
如果它们是空程序应该返回异常。请帮忙。
【问题讨论】:
什么时候需要检查?您需要提出哪种类型的异常(标准/用户定义)? 结束后 -> 如果有人使用包并说忘记设置一个变量,那么应该是一些消息 【参考方案1】:你是这个意思吗?
FUNCTION getA RETURN VARCHAR2 IS
BEGIN
IF global_vName IS NULL THEN
RAISE NO_DATA_FOUND;
END IF;
RETURN global_vName;
END;
【讨论】:
我能以某种方式执行这个函数几次来检查所有变量吗? 你想实现什么?你的整个设计看起来有点奇怪。请注意,一般 PL/SQL 表示“结构化编程”,而不是“面向对象编程”。我认为将 OOP 强加于 PL/SQL 并不是一个好主意。 如果你从 pack 中运行我的一个程序,并且它需要 setA 或 setB,该程序应该返回 SET 丢失的东西,引发异常 这是简单的异常处理——你的问题是什么? 我不知道是否需要做简单的 if 语句或者是否有其他规则可以做到这一点【参考方案2】:在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;
在第一个用户调用包(函数、过程、游标、变量等)之前,Oracle 会自动执行初始化部分。所以你可以确保你的变量总是被初始化。
【讨论】:
所有 SET 都在包外完成,例如:我将 setA、setB ...然后运行其他程序,如果您没有 setA 或 setB,它将不会运行,但应该引发一个异常,如丢失设置A @4est 取定义初始值的逻辑,在初始化部分实现。以上是关于过程检查设置参数(PL/SQL、ORACLE)的主要内容,如果未能解决你的问题,请参考以下文章
将oracle.sql.ARRAY传递给PL / SQL过程时设置时区
Oracle 存储过程无法生成 csv 文件 - ORA-06502: PL/SQL: numeric or value error: string buff