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