2012-03-23 3 views
0

Oracleと同様、DB2はストアド・プロシージャのパラメータのデフォルトをサポートします。 Oracle構文:SYSCATテーブルを使用して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 
) 

オラクルでは、私はこのクエリを使用してデフォルトを発見することができます。

SELECT argument_name, defaulted FROM all_arguments WHERE object_id = :proc_id 

私はSYSCATテーブルからDB2選択でこれを発見することができますどのように? SYSCAT.PROCPARMSまたはSYSCAT.FUNCPARMSには便利なコラムが表示されません。 (これはあなたを想定してい

Discover SQL Server procedure default parameters using SYS or INFORMATION_SCHEMA tables

答えて

2

:注意、私はそのような手順が...

注存在する場合SYSPROCから任意のストアドプロシージャを呼び出す気にしない、私は、SQL Serverに関する同様の質問として尋ねてきましたDB2 Linux/Unix/Windowsの情報を探していますが、それは他のプラットフォームでは異なる場合があります)

この情報を見つけるにはSYSCAT.ROUTINEPARMSカタログビューを使用できます。この関数は、関数が受け入れることができるすべてのパラメータタイプをリストし(プロシージャに複数のシグネチャがある場合は複数の行が存在する可能性があります)、該当する場合はデフォルトの(DEFAULT列)デフォルトを指定しないと、その列はNULLになります。例えば

、あなたがSYSIBMADM.SUBMITの入力パラメータを見たいと思った場合(オプションのパラメータを持っている)、このクエリを使用できます。B

SELECT * 
FROM SYSCAT.ROUTINEPARMS 
WHERE ROUTINESCHEMA='SYSIBMADM' 
    AND ROUTINENAME ='SUBMIT' 
    AND ROWTYPE IN ('B', 'P') 

ROWTYPE入力と出力の両方の変数を可能にし、P入力専用です。その他のタイプについては、上記リンク先のインフォメーションセンターの文書に記載されています。

+0

ワンダフル!なぜ私は 'SYSCAT.ROUTINEPARMS'を見落としたのか分かりません –

関連する問題