【发布时间】:2010-09-12 02:31:25
【问题描述】:
我已经编写了一些 Oracle 存储过程,其中有超过 20 个输入参数,其中需要超过 10 个参数,我希望所有参数都有一些值并且不想为此接受空值,有什么我可以做的吗在可以限制 null 输入参数的过程定义本身中声明,或者我是否必须检查每个值并在所需值为 null 时引发异常?
【问题讨论】:
我已经编写了一些 Oracle 存储过程,其中有超过 20 个输入参数,其中需要超过 10 个参数,我希望所有参数都有一些值并且不想为此接受空值,有什么我可以做的吗在可以限制 null 输入参数的过程定义本身中声明,或者我是否必须检查每个值并在所需值为 null 时引发异常?
【问题讨论】:
我知道这是一个老问题,但还有另一种选择(描述为here):
SUBTYPE varchar2_not_null IS VARCHAR2 NOT NULL;
您可以在与存储过程相同的包中定义此类型(和number_not_null 等),如果您想在很多地方使用它们,也可以在它们自己的包中定义。然后,您可以声明这些类型的参数。
如果 NULL 作为参数传递,您将收到一条非常有用的错误消息:
cannot pass NULL to a NOT NULL constrained formal parameter
【讨论】:
在 PL/SQL 中,我不知道如何检查每一个。
如果您从外部库调用存储过程,则该库可能具有该功能。这可能不太可能,因为经常需要 NULL 输入参数。
您可以创建一个辅助 PL/SQL 过程,给定一个值,如果它为 null 将引发异常以节省冗余代码。然后,您可以编写一大块 perl/python/groovy 来吞噬您的过程声明,并将这些调用发送到您的 null 检查过程。
【讨论】: