如何将NULL输入参数限制为oracle存储过程

时间:2008-09-22 18:15:01

标签: oracle stored-procedures

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

2 个答案:

答案 0 :(得分:12)

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

SUBTYPE varchar2_not_null IS VARCHAR2 NOT NULL;

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

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

cannot pass NULL to a NOT NULL constrained formal parameter

答案 1 :(得分:6)

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

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

您可以创建一个帮助程序PL / SQL过程,如果它为null,则会引发异常以保存冗余代码。然后你可以编写一个perl / python / groovy块来填充你的过程声明并将这些调用转移到你的null检查过程。