Процедуры
Сохраненные процедуры - это готовые части кода, которые хранятся и выполняются в базе данных на сервере. Приведу несколько примеров, позволяющих получить информацию о них.
Следующий пример выбирает все процедуры, созданные пользователем.
SELECT RDB$PROCEDURES.RDB$PROCEDURE_NAME, RDB$PROCEDURES.RDB$SYSTEM_FLAG FROM RDB$PROCEDURES WHERE ( (RDB$PROCEDURES.RDB$SYSTEM_FLAG = 0) );
Данный запрос позволяет узнать остальную наиболее интересную информацию о процедурах, кроме наименования: количество входных и выходных переменных, описание и исходный текст процедуры и хозяина, создавшего процедуру
SELECT RDB$PROCEDURES.RDB$PROCEDURE_NAME, RDB$PROCEDURES.RDB$PROCEDURE_INPUTS, RDB$PROCEDURES.RDB$PROCEDURE_OUTPUTS, RDB$PROCEDURES.RDB$DESCRIPTION, RDB$PROCEDURES.RDB$PROCEDURE_SOURCE, RDB$PROCEDURES.RDB$OWNER_NAME, RDB$PROCEDURES.RDB$SYSTEM_FLAG FROM RDB$PROCEDURES WHERE ( (RDB$PROCEDURES.RDB$SYSTEM_FLAG = 0) );
Следующий запрос, использую информацию из таблицы RDB$PROCEDURE_PARAMETERS, выдает сведения о параметрах процедуры.
SELECT RDB$PROCEDURES.RDB$PROCEDURE_NAME, RDB$PROCEDURES.RDB$PROCEDURE_INPUTS, RDB$PROCEDURES.RDB$PROCEDURE_OUTPUTS, RDB$PROCEDURE_PARAMETERS.RDB$PARAMETER_NAME, RDB$PROCEDURE_PARAMETERS.RDB$PARAMETER_NUMBER, RDB$PROCEDURE_PARAMETERS.RDB$PARAMETER_TYPE, RDB$PROCEDURE_PARAMETERS.RDB$DESCRIPTION FROM RDB$PROCEDURES LEFT OUTER JOIN RDB$PROCEDURE_PARAMETERS ON (RDB$PROCEDURES.RDB$PROCEDURE_NAME = RDB$PROCEDURE_PARAMETERS.RDB$PROCEDURE_NAME) WHERE ((RDB$PROCEDURES.RDB$SYSTEM_FLAG = 0) or (RDB$PROCEDURES.RDB$SYSTEM_FLAG IS NULL)) ORDER BY RDB$PROCEDURES.RDB$PROCEDURE_NAME, RDB$PROCEDURE_PARAMETERS.RDB$PARAMETER_TYPE, RDB$PROCEDURE_PARAMETERS.RDB$PARAMETER_NUMBER;
А, используя информацию из таблиц RDB$FIELDS и RDB$TYPES, можно узнать типы параметров процедур и др. их характеристики.
SELECT RDB$PROCEDURES.RDB$PROCEDURE_NAME, RDB$PROCEDURES.RDB$PROCEDURE_INPUTS, RDB$PROCEDURES.RDB$PROCEDURE_OUTPUTS, RDB$PROCEDURE_PARAMETERS.RDB$PARAMETER_NAME, RDB$PROCEDURE_PARAMETERS.RDB$PARAMETER_NUMBER, RDB$PROCEDURE_PARAMETERS.RDB$PARAMETER_TYPE, RDB$PROCEDURE_PARAMETERS.RDB$DESCRIPTION, RDB$FIELDS.RDB$FIELD_NAME, RDB$FIELDS.RDB$FIELD_LENGTH, RDB$FIELDS.RDB$FIELD_SCALE, RDB$FIELDS.RDB$FIELD_TYPE, RDB$FIELDS.RDB$NULL_FLAG, RDB$TYPES.RDB$TYPE_NAME FROM RDB$PROCEDURES LEFT OUTER JOIN RDB$PROCEDURE_PARAMETERS ON (RDB$PROCEDURES.RDB$PROCEDURE_NAME = RDB$PROCEDURE_PARAMETERS.RDB$PROCEDURE_NAME) INNER JOIN RDB$FIELDS ON (RDB$PROCEDURE_PARAMETERS.RDB$FIELD_SOURCE = RDB$FIELDS.RDB$FIELD_NAME) INNER JOIN RDB$TYPES ON (RDB$FIELDS.RDB$FIELD_TYPE = RDB$TYPES.RDB$TYPE) WHERE ( ((RDB$PROCEDURES.RDB$SYSTEM_FLAG = 0) or (RDB$PROCEDURES.RDB$SYSTEM_FLAG IS NULL)) and (RDB$TYPES.RDB$FIELD_NAME = 'RDB$FIELD_TYPE') ) ORDER BY RDB$PROCEDURES.RDB$PROCEDURE_NAME, RDB$PROCEDURE_PARAMETERS.RDB$PARAMETER_TYPE, RDB$PROCEDURE_PARAMETERS.RDB$PARAMETER_NUMBER;