Sql 使用SYSCAT表发现DB2过程默认参数
与Oracle一样,DB2支持存储过程中的参数默认值。Oracle语法: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-
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