Обнаружение параметров процедуры DB2 по умолчанию с помощью таблиц SYSCAT

Как и 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.PROCPARMS или SYSCAT.FUNCPARMS. Обратите внимание: я не возражаю против вызова любой хранимой процедуры из SYSPROC, если такая процедура существует...

Обратите внимание, я задал аналогичный вопрос о SQL Server:

Обнаружение параметров процедуры SQL Server по умолчанию с использованием SYS или INFORMATION_SCHEMA таблицы


person Lukas Eder    schedule 23.03.2012    source источник


Ответы (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')

ROWTYPE из B позволяет использовать как входные, так и выходные переменные, а P — только для ввода. Другие типы описаны в документе Информационного центра, ссылка на который приведена выше.

person bhamby    schedule 23.03.2012
comment
Замечательный! Не знаю, почему я проглядел SYSCAT.ROUTINEPARMS - person Lukas Eder; 23.03.2012