2012-03-23 13 views
0

與Oracle類似,DB2支持存儲過程中的參數默認值。甲骨文語法:使用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 
) 

有了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

回答

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') 

BROWTYPE允許輸入和輸出變量,P僅用於輸入。其他類型包含在上面鏈接的信息中心文檔中。

+0

太棒了!我不知道爲什麼我忽略了'SYSCAT.ROUTINEPARMS' – 2012-03-23 13:48:04