【问题标题】:Discover DB2 procedure default parameters using SYSCAT tables使用 SYSCAT 表发现 DB2 过程默认参数
【发布时间】:2012-04-07 22:43:15
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    (假设您正在寻找有关 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')
    

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

    【讨论】:

    • 太棒了!不知道为什么我忽略了SYSCAT.ROUTINEPARMS
    猜你喜欢
    • 2012-04-07
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 2013-10-03
    • 2016-11-04
    相关资源
    最近更新 更多