与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.PROCPARMS
或SYSCAT.FUNCPARMS
中看不到任何有用的列。注意,如果存在这样的过程,我不介意从SYSPROC
调用任何存储过程......
注意,我问过类似的关于SQL Server的问题:
Discover SQL Server procedure default parameters using SYS or INFORMATION_SCHEMA tables
答案 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
仅用于输入。我在上面链接的信息中心文档中介绍了其他类型。