10

我已经编写了一些 Oracle 存储过程,其中有超过 20 个输入参数,其中需要超过 10 个参数,我希望所有参数都有一些值并且不想为此接受空值,有什么我可以在可以限制 null 输入参数的过程定义本身,或者我是否必须检查每个值并在所需值为 null 时引发异常?

4

2 回答 2

18

我知道这是一个老问题,但还有另一种选择(在此处描述):

SUBTYPE varchar2_not_null IS VARCHAR2 NOT NULL;

您可以在与存储过程相同的包中定义这种类型(和number_not_null等),如果您想在很多地方使用它们,也可以在它们自己的包中定义。然后,您可以声明这些类型的参数。

如果NULL作为参数传递,您将收到一条非常有用的错误消息:

cannot pass NULL to a NOT NULL constrained formal parameter
于 2013-08-22T12:29:57.293 回答
6

在 PL/SQL 中,我不知道如何检查每一个。

如果您从外部库调用存储过程,则该库可能具有该功能。这可能不太可能,因为经常需要 NULL 输入参数。

您可以创建一个辅助 PL/SQL 过程,如果给定一个值,如果它为 null 将引发异常以节省冗余代码。然后,您可以编写一大块 perl/python/groovy 来吞噬您的过程声明并将这些调用发出到您的空检查过程。

于 2008-09-22T18:27:16.727 回答