Sql 使用SYSCAT表发现DB2过程默认参数

Sql 使用SYSCAT表发现DB2过程默认参数,sql,stored-procedures,parameters,db2,optional-parameters,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-

与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
SELECT *
FROM SYSCAT.ROUTINEPARMS
WHERE ROUTINESCHEMA='SYSIBMADM'
  AND ROUTINENAME  ='SUBMIT'
  AND ROWTYPE IN ('B', 'P')
我如何在DB2中从
SYSCAT
表中发现这一点?我在
SYSCAT.PROCPARMS
SYSCAT.FUNCPARMS
中没有看到任何有用的列。注意,如果存在这样的过程,我不介意从
SYSPROC
调用任何存储过程

注意,关于SQL Server,我提出了类似的问题:

(假设您正在查找有关DB2Linux/Unix/Windows的信息,其他平台可能会有所不同)

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

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

SELECT argument_name, defaulted FROM all_arguments WHERE object_id = :proc_id
SELECT *
FROM SYSCAT.ROUTINEPARMS
WHERE ROUTINESCHEMA='SYSIBMADM'
  AND ROUTINENAME  ='SUBMIT'
  AND ROWTYPE IN ('B', 'P')

B
ROWTYPE
同时允许输入和输出变量,
p
仅用于输入。我在上面链接的信息中心文档中介绍了其他类型。

太棒了!我不知道为什么我忽略了SYSCAT.ROUTINEPARMS