Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

Оператор CALL


Синтаксис SQL 2003

CALL имя_процедуры ([параметр [, …]])


Ключевые слова

CALL имя_процедуры

Указывает имя хранимой процедуры, которую вы хотите вызвать. Это должна быть заранее созданная процедура, доступная в контексте текущего пользователя (в экземпляре, базе данных, схеме и тому подобное).

Определяет значения входных параметров, необходимых для хранимой процедуры. Нужно, чтобы каждый указанный параметр процедуры находился на своем порядковом месте. Следовательно, параметр, указанный пятым, передает значение пятому аргументу хранимой процедуры. Параметры должны быть заключены в скобки и отделяться друг от друга запятыми. Отметьте, что скобки необходимы даже в том случае, если параметры отсутствуют [то есть даже если нет параметров, вы все равно должны писать CALL ()]. Строки нужно заключать в одинарные кавычки. Если хранимая процедура имеет только выходные (OUT) параметры, помещайте соответствующие переменные или маркеры параметров в скобки.


Общие правила

Инструкция CALL облегчает вызов хранимой процедуры. Просто укажите имя хранимой процедуры и все используемые ею параметры, заключив их в скобки.

В этом примере кода для Oracle создается простая хранимая процедура, а затем выполняется ее вызов.

CREATE PROCEDURE update_employee_salary (emp_id NUMBER, updated_salary NUMBER)
IS BEGIN

UPDATE employee SET
salary=updated_salary
WHERE employee_id=emp_id

END;

CALL update_employee_salary(1517, 95000);

Возвращаемое значение хранимой процедуры, как правило, определяется с помощью команды GET DIAGNOSTIC. Эта команда не очень распространена среди платформ баз данных, поэтому подробную информацию ищите в документации платформы.

Многие платформы также поддерживают альтернативную команду EXECUTE, имеющую те же возможности. В некоторых случаях EXECUTE может оказаться предпочтительнее, чем CALL, поскольку ее можно использовать для запуска любого заранее подготовленного кода SQL, в том числе методов, функций и пакетов кода SQL.


DB2

Платформа DB2 поддерживает оператор CALL с дополнительными возможностями DESCRIPTOR.

CALL имя_процедуры {[параметр [, …]] | USING DESCRIPTOR имя_дискриптора}

Где:

USING DESCRIPTOR имя_дескриптора

Определяет структуру SQL Descriptor Area (SQLDA), которая содержит описания хост-переменных1. SQLDA представляет собой коллекцию переменных, которые необходимы для выполнения инструкции SQL DESCRIBE. Переменные SQLDA -это опции, которые могут использоваться в инструкциях PREPARE, OPEN, FETCH, EXECUTE и CALL. Значения в SQLDA должны быть определены до запуска команды CALL. В DB2 эта функциональность исчезает. Мы рекомендуем использовать вместо нее стандартный синтаксис CALL proc (param, param).

Платформа DB2 позволяет везде, где это нужно, заменять хост переменные именем процедуры или параметрами. При использовании предложения USING DESCRIPTOR переменные должны быть строковыми, длиной не более 254 символов.

В DB2 возвращаемое хранимой процедурой значение помещается в поле SQLERRD в SQLCA (SQL Communication Area). Вы также можете использовать инструкцию GET DIAGNOSTIC для получения значения RETURN’JSTATUS (-1 указывает на ошибку) или числа строк.


MySQL

Не поддерживается.


Oracle

Платформа Oracle позволяет использовать инструкцию CALL для вызова самостоятельных хранимых процедур, функций и методов, а также хранимых процедур и функций, содержащихся внутри типа или пакета. Вот синтаксис Oracle.

CALL [схема.] [{имя_типа | имя_пакета}.] имя_процедуры [(параметр [, …])] [INTO имя переменной [[INDICATOR] :имя_индикатора]]

Где:

CALL [schema.] [{имя_типа | имя_пакета}.] имя_процедуры

Вызов именованного объекта. Вы можете указать имя объекта полностью, в том числе схему, тип и тому подобное, или позволить Oracle предположить, что объект находится в текущей схеме и текущем экземпляре базы данных. Если процедура или функция находится в другой базе данных, просто укажите эту базу с помощью имени связи с базой данных (параметр @dblink в синтаксисе). Параметр @dblink должен ссылаться на ранее созданное соединение с базой данных.

INTO :имя_переменной

Указывается имя ранее объявленной переменной, которая будет хранить возвращаемое вызванной функцией значение. Параметр INTO используется и является необходимым только в том случае, если вызывается функция.

INDICATOR :имя_индикатора

Хранит предложение для хост-переменной — например, равно ли возвращаемое значение NULL для функций, откомпилированных в процедуре.

В параметры, применяемые в Oracle, нельзя включать псевдостолбцы или функции VALUE и REF. Вы должны использовать хост-переменные для любых параметров, соответствующие аргументу OUTma IN OUT вызванной хранимой процедуры.


PostgreSQL

Не поддерживается.

Справочник по командам SQL | 89


SQL Server

He поддерживается. Вместо этой команды используется не входящая в стандарт ANSI инструкция EXECUTE.

Источник