如何将oracle过程的参数默认设置为select的结果?

时间:2011-10-13 15:43:48

标签: oracle stored-procedures procedure

我有一个oracle过程,我想将默认参数设置为select语句的结果,如下所示。

procedure foo( startID number : = max(x.id) from xtable x )

但上面的代码是非法语法。

1 个答案:

答案 0 :(得分:8)

您可以使用其他无效值来表示此含义,例如NULL:

PROCEDURE foo (p_id NUMBER DEFAULT NULL) IS
   l_startID NUMBER := p_id;
BEGIN
   IF p_id IS NULL THEN
      SELECT max(id) INTO l_startID FROM xtable;
   END IF;
   ...
END;

如果您的功能/程序在包中,您还可以overload

PROCEDURE foo (p_id NUMBER)
[...]

PROCEDURE foo IS
   l_startID NUMBER;
BEGIN
   SELECT max(id) INTO l_startID FROM xtable;
   foo(l_startID);
END;