Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка СУБД MySQL Visual Studio Кузин.doc
Скачиваний:
111
Добавлен:
13.05.2015
Размер:
2.65 Mб
Скачать
    1. Создание, запуск и удаление простой функции

Для создания простой процедуры в клиенте mysql.exeможно выполнить следующие операторы:

DELIMITER //

CREATE FUNCTION Hello_World()

RETURNS VARCHAR(20)

BEGIN

RETURN ‘Hello, world!’;

END

//

Для запуска функции необходимо ввести

SELECT Hello_World()//

    1. Простые и системные переменные

Объявить переменную в хранимой подпрограмме можно в любом месте тела подпрограммы (внутри блока BEGIN..END). Синтаксис оператора объявления переменной:

DECLAREимя [, имя] ... тип_данных [DEFAULTзначение]

Объявить переменную в хранимой подпрограмме можно в любом месте тела подпрограммы. Если параметр DEFAULTотсутствует, то переменная инициализируется со значениемNULL.

Для присвоения значения переменной может быть использован оператор SET. В следующем примере переменнойSприсваивается текстовое значение, которое затем выводится на экран:

CREATE PROCEDURE Hello_World()

BEGIN

DECLARE S VARCHAR(20);

SET S=‘Hello, world!’;

SELECT(S);

END

//

Результат вызова процедуры на выполнение:

Иногда бывает необходимо присвоить переменной значение, возвращаемое в результате запроса. Это можно сделать при помощи оператора SELECT..INTO. При этом запрос должен возвращать только одну строку. Если запрос возвращает пустой результат, это приведет к ошибке 1329 (No data). Если запрос содержит более одной строки, это приведет к ошибке 1172 (Result consisted of more than one row). Количество строк, возвращаемых запросом, можно ограничить опцией LIMITоператораSELECT. Данная опция имеет два параметра. Первый параметр указывает смещение возвращаемого набора строк относительно начала, второй – количество возвращаемых строк. При использовании опции только с одним параметром он интерпретируется как количество возвращаемых строк от начала результата. Таким образом, совместно с оператором SELECT..INTO можно использовать опциюLIMIT1. Следующая процедура выводит наименование самой тяжелой детали:

CREATEPROCEDUREHeavy()

BEGIN

DECLARE S VARCHAR(20);

SELECT weight INTO S FROM Parts ORDER BY Weight DESC LIMIT 1;

SELECT(S);

END

//

В процессе выполнения оператора SELECT..INTO выполняется неявное приведение типа возвращаемого запросом значения типу переменной:

CREATE PROCEDURE Parts_count()

BEGIN

DECLARE S VARCHAR(20);

SELECT count(*) INTO S FROM Parts;

SELECT(S);

END

//

Разница между простыми и системными переменнымив том, что системные переменные доступны извне хранимой процедуры. Системную переменную не нужно инициализировать. Разница в простой и системной переменной пользовании префикса @ в имени системной переменной.

SET @S=‘Hello, world!’;

Значение системной переменной можно узнать после выполнения хранимой процедуры:

CREATE PROCEDURE Parts_count()

BEGIN

SELECT count(*) INTO @S FROM Parts;

END

//

    1. Параметры процедур и функций

Параметры процедуры или функции указываются в операторе CREATEпосле имени в скобках. Если параметров нет, то необходимо указывать пустые скобки. Параметры бывают типовIN,OUTINOUT(см. таблицу).

Режим

Предназначение

Использование параметра

IN

Только для чтения

Значение параметра может применяться, но не может быть изменено в модуле

OUT

Только для записи

В модуле можно присваивать значение параметру, но нельзя использовать его.

IN OUT

Для чтения и записи

В модуле можно использовать и изменять значение параметра

Пример процедуры, в которой используется один параметр INи один параметрOUT:

CREATE PROCEDURE Parts_count(IN Mat VARCHAR(20),OUT PNum INT)

BEGIN

SELECT count(*) INTO PNum FROM Parts WHERE Material=Mat ;

END

//

CALL Parts_count(‘Rubber’,@S)//

Пример функции с параметром:

CREATE FUNCTION Hello_World(S VARCHAR(20))

RETURNS VARCHAR(20)

BEGIN

RETURN CONCAT(‘Hello ’,S,’!!!’);

END

//

Для запуска функции необходимо ввести

SELECT Hello_World(‘Root’)//