【问题标题】:How to select default values for stored proc arguments?如何为存储的 proc 参数选择默认值?
【发布时间】:2013-11-01 12:53:50
【问题描述】:

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

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 列中的(备忘录)。 Oracle 文档没有帮助,因为此功能是“保留供将来使用”: http://docs.oracle.com/cd/E16655_01/server.121/e17615/refrn20015.htm#i1573843

请问还有其他读取程序参数默认值的方法吗?

【问题讨论】:

标签: sql oracle plsql oracle11g


【解决方案1】:

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

【讨论】:

  • 见 bug 183707,仅供参考。很遗憾,这已经是 20 年的错误了。但也令人印象深刻的是,他们能够长时间跟踪错误。
猜你喜欢
  • 2015-02-21
  • 2015-02-18
  • 2011-09-21
  • 1970-01-01
  • 2012-08-06
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
  • 2014-05-13
相关资源
最近更新 更多