使用SYSCAT表发现DB2过程缺省参数

时间:2012-03-23 11:00:44

标签: sql stored-procedures parameters db2 optional-parameters

与Oracle一样,DB2支持存储过程中的参数默认值。 Oracle语法:

CREATE OR REPLACE PROCEDURE p_default (
  p_in_number   IN  number   := 0,
  p_out_number  OUT number,
  p_in_varchar  IN  varchar2 := '0',
  p_out_varchar OUT varchar2,
  p_in_date     IN  date     := date '1981-07-10',
  p_out_date    OUT date
)

DB2语法:

CREATE PROCEDURE p_default (
  IN  p_in_number   INTEGER DEFAULT(0),
  OUT p_out_number  INTEGER,
  IN  p_in_varchar  VARCHAR(10) DEFAULT('0'),
  OUT p_out_varchar VARCHAR(10),
  IN  p_in_date     DATE DEFAULT('1981-07-10'),
  OUT p_out_date    DATE
)

使用Oracle,我可以使用此查询发现默认值:

SELECT argument_name, defaulted FROM all_arguments WHERE object_id = :proc_id

如何在DB2中从SYSCAT表中进行选择时发现这一点?我在SYSCAT.PROCPARMSSYSCAT.FUNCPARMS中看不到任何有用的列。注意,如果存在这样的过程,我不介意从SYSPROC调用任何存储过程......

注意,我问过类似的关于SQL Server的问题:

Discover SQL Server procedure default parameters using SYS or INFORMATION_SCHEMA tables

1 个答案:

答案 0 :(得分:2)

(这假设您正在寻找有关DB2 Linux / Unix / Windows的信息,它可能因其他平台而异)

您可以使用SYSCAT.ROUTINEPARMS目录视图查找此信息。它列出了函数可以接受的所有参数类型(如果过程有多个签名,则可以有多个行),如果适用,则列出它们的默认值(在恰当命名的DEFAULT列中)。如果未提供默认值,则该列将为NULL

例如,如果要查看SYSIBMADM.SUBMIT(具有可选参数)的输入参数,可以使用此查询:

SELECT *
FROM SYSCAT.ROUTINEPARMS
WHERE ROUTINESCHEMA='SYSIBMADM'
  AND ROUTINENAME  ='SUBMIT'
  AND ROWTYPE IN ('B', 'P')
ROWTYPE的{​​p> B允许输入和输出变量,P仅用于输入。我在上面链接的信息中心文档中介绍了其他类型。