5.2.4. Синтаксис команды CALLCALL sp_name([parameter[,…]])

5.2.4. Синтаксис команды CALLCALL sp_name([parameter[,…]])

Инструкция CALL вызывает процедуру, которая была определена предварительно, с помощью команды CREATE PROCEDURE.

CALL может передавать обратно значения к параметрам использования вызывающего оператора, которые объявлены как OUT или INOUT. Это также вернет число строк, на которые воздействовал запрос, это же значение программа пользователя может получать в уровне SQL, вызывая функцию ROW_COUNT() или из C API функцией mysql_affected_rows().

Чтобы вернуть значение из процедуры, использующей параметр OUT или INOUT, передайте параметр посредством переменной пользователя, и затем проверьте значение переменной после возврата из процедуры. Если Вы вызываете процедуру изнутри другой сохраненной процедуры или функции, Вы можете также передавать стандартный параметр или локальную стандартную переменную как параметр IN или INOUT. Для параметра INOUT инициализируйте значение перед его передачей процедуре. Следующая процедура имеет параметр OUT, который процедура устанавливает в текущую (актуальную) версию сервера, и значение INOUT, которое процедура увеличивает:

CREATE PROCEDURE p (OUT ver_param VARCHAR(25), INOUT incr_param INT)

BEGIN

# Set value of OUT parameter

SELECT VERSION() INTO ver_param;

# Increment value of INOUT parameter

SET incr_param = incr_param + 1;

END;

Перед вызовом процедуры, инициализируйте переменную, которая будет передана как параметр INOUT. После вызова процедуры, значения в двух переменных будут установлены или изменены:

mysql> SET @increment = 10;

mysql> CALL p(@version, @increment);

mysql> SELECT @version, @increment;

+------------+------------+

| @version | @increment |

+------------+------------+

| 5.0.25-log | 11 |

+------------+------------+

Если Вы пишете программы на C, которые выполняют сохраненные процедуры с инструкцией SQL CALL, Вы должны установить флажок CLIENT_MULTI_RESULTS, когда Вы вызываете mysql_real_connect(), либо установить CLIENT_MULTI_STATEMENTS. Это потому, что каждый CALL возвращает результат, чтобы указать состояние обращения, в дополнение к любым наборам результатов, которые могли бы быть возвращены инструкциями, выполненными внутри процедуры. Чтобы обрабатывать результат инструкции CALL, используйте цикл, который вызывает mysql_next_result() чтобы определить, имеется ли большее количество результатов.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

7.2. Синтаксис CSS

Из книги автора

7.2. Синтаксис CSS Теперь, когда вы имеете представление о том, как можно добавить таблицу стилей в HTML-документ, разберем синтаксис языка


Сокращенный синтаксис

Из книги автора

Сокращенный синтаксис Для образцов существует два правила сокращения осей:• child::childname может быть сокращено как childname;• attribute::childname может быть сокращено как @childname.В следующем списке перечислен ряд примеров образцов с сокращенным синтаксисом; в конце главы вы увидите


7.4.3 Сообщение Parameter Problem

Из книги автора

7.4.3 Сообщение Parameter Problem ICMP-сообщение Parameter Problem используется для отчета об ошибках, не специфицированных в кодах других сообщений. Например, в полях вариантов может появиться неверная информация, не позволяющая правильно обработать датаграмму, в результате чего


23.2.4 Parameter Problem

Из книги автора

23.2.4 Parameter Problem Сообщение Parameter Problem (проблема с параметрами) отправляет система, которая не может обработать пакет из-за одного из полей заголовка. Коды сообщения:0 Неправильное количество полей заголовка1 Нераспознанный тип в поле Next Header2 Нераспознанный вариант IPv6Формат


51. Синтаксис Active X

Из книги автора

51. Синтаксис Active X Для органов управления ActiveX попускать кавычки нельзя.CODEBASE = URLВ данном атрибуте пишется URL-адрес файла, который содержит вызываемый орган управления и доступный для получения с одного из серверов Интернета.CODETYPE = MIME-тип, TYPE = MIME-типДанные два


4.1. Синтаксис и семантика

Из книги автора

4.1. Синтаксис и семантика Прежде чем двигаться дальше, введем базовые определения. Языком мы будем называть множество строк (в большинстве случаев это будет бесконечное множество). Каждое выражение (в некоторых источниках вместо "выражение" употребляются термины


5.2.6. Синтаксис DECLARE

Из книги автора

5.2.6. Синтаксис DECLARE Инструкция DECLARE используется, чтобы определить различные элементы, локальные для подпрограммы:Локальные переменные. Подробности в разделе "5.2.7. Переменные в сохраненных подпрограммах".Условия и драйверы. Подробности в разделе "5.2.8. Условия и драйверы


Синтаксис

Из книги автора

Синтаксис Синтаксис функции EXTRACT():EXTRACT (элемент FROM поле)элемент должен быть одним из допустимых элементов в типе данных поле. Не все элементы допустимы для всех типов данных дата/время. Тип данных элемента изменяется в соответствии с выделяемым элементом. Табл. 10.10


Синтаксис

Из книги автора

Синтаксис Если, будучи соединенным с базой данных, вы захотите ее удалить, используйте для этого оператор:DROP DATABASE;После удаления база данных не может быть восстановлена, следовательно:* будьте уверены, что вы действительно хотите, чтобы она была потеряна навсегда;*


Синтаксис

Из книги автора

Синтаксис Для всех версий Firebird синтаксис CREATE TRIGGER одинаков:CREATE TRIGGER имя FOR {таблица | просмотр}[ACTIVE | INACTIVE]{BEFORE | AFTER} {DELETE | INSERT | UPDATE}[POSITION число]AS <тело-триггера> ^<тело-триггера> = [<список-объявления-переменных>] <блок><список-объявления-переменных> = DECLARE VARIABLE


Синтаксис цикла

Из книги автора

Синтаксис цикла Синтаксис цикла непосредственно следует из предшествующих соображений, определяющих ингредиенты цикла. Он будет включать элементы, отмеченные как необходимые.[x]. Инвариант цикла inv - утверждение.[x]. Условие выхода exit, чья конъюнкция с inv дает желаемую


48. Синтаксис ассемблера

Из книги автора

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