如何为存储的proc参数选择默认值?

时间:2013-11-01 12:53:51

标签: sql oracle plsql oracle11g

在获取过程参数的默认值时遇到问题:

CREATE PROCEDURE foo(p_arg VARCHAR2:= 'FOO')
IS
BEGIN
 NULL;
END;
/

SELECT argument_name, default_value
  FROM sys.all_arguments
 WHERE object_name = 'FOO';

 ARGUMENT_NAME | DEFAULT_VALUE
 ------------------------------
 P_ARG         |  (Memo)

我为过程参数设置的默认值不会显示在输出中。我只看到default_value列中的(Memo)。 Oracle文档没有帮助,因为此功能“保留供将来使用”: http://docs.oracle.com/cd/E16655_01/server.121/e17615/refrn20015.htm#i1573843

有没有其他方法可以读取过程参数的默认值?

1 个答案:

答案 0 :(得分:2)

不幸的是,default_value数据字典视图的*_arguments列永远不会被填充。出于某种原因,Oracle会在很长一段时间内将其保留用于将来使用。您可以看到参数已经或没有为其分配默认值(列defaulted),但缺少关于实际默认值的重要信息。在某种程度上,它被认为是文档错误。值得注意的是,dbms_describe包不提供有关参数的实际默认值的信息。因此,它为您提供了一个选项来检索参数的默认值 - 存储过程源代码解析,可以通过查询*_source视图来获取。