Хранимые процедуры
Пример SQL и хранимых процедур DB2, которые можно использовать с провайдером данных JDBC.
call[:индекс] имя_процедуры [аргумент] ...Где: - индекс
- Дополнительное целое число, указывающее, какой набор результатов должен использоваться провайдером данных. Этот параметр имеет смысл использовать, если хранимая процедура возвращает несколько наборов результатов, а вы хотите собрать значения только из одного из них. Если индекс не указан, то собираются и возвращаются данные из всех наборов результатов.
- имя_процедуры
- Имя хранимой процедуры, которую должен запустить провайдер данных.
- аргумент
- Входной аргумент хранимой процедуры. Несколько аргументов разделяются пробелами. Если имя аргумента содержит пробел, то заключите имя в кавычки. Если аргумент можно проанализировать как целое число, то он передается в хранимую процедуру как целочисленный аргумент. Любой аргумент, заключенный в кавычки, передается как строковый аргумент.
Примеры SQL Server
call sp_helpdbВыполняет
процедуру call sp_helpdb; аргументы для этой процедуры не требуются.
В данные, возвращенные провайдером данных, включаются данные из всех возвращенных наборов результатов.
Выполняет процедуру sp_helpdb с аргументом master.
Это входной строковый аргумент. В данные, возвращенные провайдером данных, включаются только данные из второго набора результатов, возвращенного хранимой процедурой.
Если не указан индекс, то собираются данные из всех возвращенных наборов результатов. В этом случае убедитесь, что возвращенные данные совместимы с заданными атрибутами. Agent Builder создает атрибуты из первого возвращенного набора результатов; предполагается, что все ожидаемые дополнительные наборы результатов совместимы с первым набором.
Хранимые процедуры DB2
-- Этот сценарий запускается так:
-- db2 -td# -vf db2sample.sql
-- Эта процедура показывает, как возвратить запрос из
-- хранимой процедуры DB2; этот запрос может использоваться
-- провайдером JDBC Agent Builder. Хранимая процедура
-- возвращает следующие столбцы:
-- Имя Описание Тип данных
-- current_timestamp Текущее системное время отметка времени
-- lock_timeout Срок ожидания блокировки числовая шкала 0
-- user Пользователь сеанса строка из 128 символов
DROP procedure db2sample#
CREATE PROCEDURE db2sample()
RESULT SETS 1
LANGUAGE SQL
BEGIN ATOMIC
-- Задать SQL для запроса
DECLARE c1 CURSOR WITH HOLD WITH RETURN FOR
SELECT CURRENT TIMESTAMP as current_timestamp,
CURRENT LOCK TIMEOUT as lock_timeout, CURRENT USER as user
FROM sysibm.sysdummy1;
-- Передать запрос и возвратить данные
OPEN c1;
END#Эту функцию можно вызвать из Agent Builder, используя синтаксис, определенный для других хранимых процедур.
Для выполнения этой хранимой процедуры в качестве оператора JDBC нужно задать call db2sample.
Хранимые процедуры Oracle
CREATE OR REPLACE FUNCTION ITMTEST
RETURN SYS_REFCURSOR
IS
v_rc SYS_REFCURSOR;
НАЧАТЬ
OPEN v_rc FOR SELECT * FROM ALL_CLUSTERS;
RETURN v_rc;
END;Эту функцию можно вызвать из Agent Builder, используя синтаксис, определенный для других хранимых процедур.
Для выполнения этой хранимой процедуры в качестве оператора JDBC нужно задать call ITMTEST. Так как функция Oracle должна возвращать ссылку указателя, функции Oracle могут обрабатывать только один набор результатов. Это значит, что опция индекса
не поддерживается для Oracle, так как методов для возвращения нескольких наборов результатов нет.