Пример простой хранимой процедуры

Пример простой хранимой процедуры

Настало время создать первую хранимую процедуру и на ее примере изучить процесс создания хранимых процедур. Но для начала следует сказать несколько слов о том, как работать с хранимыми процедурами Дело в том, что своей славой малопонятного и неудобного инструмента ХП обязаны чрезвычайно бедным стандартным средствам разработки и отладки хранимых процедур. В документации по InterBase рекомендуется создавать процедуры с помощью файлов SQL-скриптов, содержащих текст ХП, которые подаются на вход интерпретатору isql, и таким образом производить создание и модификацию ХП Если в этом SQL-скрипте на этапе компиляции текста процедуры в BLR (о BLR см главу "Структура базы данных InterBase" (ч. 4)) возникнет ошибка, то isql выведет сообщение о том, на какой строке файла SQL-скрипта возникла эта ошибка. Исправляйте ошибку и повторяйте все сначала. Про отладку в современном понимании этого слова, т. е. о трассировке выполнения, с возможностью посмотреть промежуточные значения переменных, речь вообще не идет. Очевидно, что такой подход не способствует росту привлекательности хранимых процедур в глазах разработчика

Однако помимо стандартного минималистского подхода к разработке ХП существуют также инструменты сторонних разработчиков, которые делают работу с хранимыми процедурами весьма удобной Большинство универсальных продуктов для работы с InterBase, перечисленных в приложении "Инструменты администратора и разработчика InterBase", предоставляют удобный инструментарий для работы с ХП. Мы рекомендуем обязательно воспользоваться одним из этих инструментов для работы с хранимыми процедурами и изложение материала будем вести в предположении, что у вас имеется удобный GUI-инструмент, избавляющий от написания традиционных SQL-скриптов

Синтаксис хранимых процедур описывается следующим образом:

CREATE PROCEDURE name

[ ( param datatype [, param datatype ...] ) ]

[RETURNS ( param datatype [, param datatype ...])]

AS

<procedure_body>;

< procedure_body> = [<vanable_declaration_list>]

< block>

< vanable_declaration_list> =

DECLARE VARIABLE var datatype;

[DECLARE VARIABLE var datatype; ...]

<block> =

BEGIN

< compound_statement>

[< compound_statement> ...]

END

< compound_statement> = (<block> statement;}

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

Итак, вот пример очень простой хранимой процедуры, которая принимает на входе два числа, складывает их и возвращает полученный результат:

CREATE PROCEDURE SP_Add(first_arg DOUBLE PRECISION,

second_arg DOUBLE PRECISION)

RETURNS (Result DOUBLE PRECISION)

AS

BEGIN

Result=first_arg+second_arg;

SUSPEND;

END

Как видите, все просто: после команды CREATE PROCEDURE указывается имя вновь создаваемой процедуры (которое должно быть уникальным в пределах базы данных) - в данном случае SP_Add, затем в скобках через запятую перечисляются входные параметры ХП - first_arg и second_arg - с указанием их типов.

Список входных параметров является необязательной частью оператора CREATE PROCEDURE - бывают случаи, когда все данные для своей работы процедура получает посредством запросов к таблицам внутри тела процедуры.

В хранимых процедурах используются любые скалярные типы данных InteiBase He предусмотрено применение массивов и типов, определяемых пользователем, - доменов

Далее идет ключевое слово RETURNS, после которого в скобках перечисляются возвращаемые параметры с указанием их типов — в данном случае только один - Result.

Если процедура не должна возвращать параметры, то слово RETURNS и список возвращаемых параметров отсутствуют.

После RETURNS указано ключевое слово AS. До ключевого слова AS идет заголовок, а после него - тело процедуры.

Тело хранимой процедуры представляет собой перечень описаний ее внутренних (локальных) переменных (если они есть, подробнее рассмотрим ниже), разделяемый точкой с запятой (;), и блок операторов, заключенный в операторные скобки BEGIN END. В данном случае тело ХП очень простое - мы просто складываем два входных аргумента и присваиваем их результат выходному, а затем вызываем команду SUSPEND. Чуть позже мы разъясним суть действия этой команды, а пока лишь отметим, что она нужна для передачи возвращаемых параметров туда, откуда была вызвана хранимая процедура.

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

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

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

Просмотр всех объектов базы данных с помощью хранимой процедуры sp_help

Из книги Обработка баз данных на Visual Basic®.NET автора Мак-Манус Джеффри П

Просмотр всех объектов базы данных с помощью хранимой процедуры sp_help SQL Server позволяет просмотреть все объекты, доступные в любой базе данных. Это можно сделать с помощью хранимой процедуры (stored procedure) – небольшого кода, хранящегося и выполняемого на сервере. Просмотреть


Создание хранимой процедуры с помощью программы SQL Query Analyzer

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

Создание хранимой процедуры с помощью программы SQL Query Analyzer Процесс создания хранимой процедуры с помощью SQL Query Analyzer практически не отличается от аналогичного процесса в окне программы SQL Server Enterprise Manager. НА ЗАМЕТКУ Убедитесь в том, что хранимая процедура создается в базе


19.5.1. Простой пример

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.


11.3.2. Простой пример stat()

Из книги Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform автора Кёртен Роб

11.3.2. Простой пример stat() Рассмотрим простую программу, которая отображает информацию из lstat() для каждого имени файла, переданного в аргументе. Она иллюстрирует, как использовать значения, возвращенные семейством функций stat(). 1: /* statsamp.с */ 2: 3: /* Для каждого имени файла,


Простой пример функции io_read()

Из книги Искусство программирования на языке сценариев командной оболочки автора Купер Мендель

Простой пример функции io_read() Чтобы проиллюстрировать, как ваш администратор ресурса мог бы возвращать клиенту данные, рассмотрим простейший администратор ресурса, который всегда возвращает одну и ту же строковую константу «Здравствуй, мир! ». Даже в таком простом случае


Простой пример функции io_write()

Из книги Язык Си - руководство для начинающих автора Прата Стивен

Простой пример функции io_write() Это был простой пример функции io_read(); давайте теперь перейдем к функции io_write(). Основной камень преткновения, связанный с io_write(), — получить доступ к данным. Поскольку библиотека администратора ресурсов считывает лишь незначительную часть


Простой пример функции io_devctl()

Из книги CSS3 для веб-дизайнеров автора Сидерхолм Дэн

Простой пример функции io_devctl() Клиентский вызов devctl() формально определен так:#include <sys/types.h>#include <unistd.h>#include <devctl.h>int devctl(int fd, int dcmd, void *dev_data_ptr, size_t nbytes, int *dev_info_ptr);Прежде чем рассматривать эту функцию с позиций администратора ресурсов, надо сначала понять, что это за


Пример 10-14. Простой цикл while

Из книги Недокументированные и малоизвестные возможности Windows XP автора Клименко Роман Александрович

Пример 10-14. Простой цикл while #!/bin/bashvar0=0LIMIT=10while [ "$var0" -lt "$LIMIT" ]do echo -n "$var0 " # -n подавляет перевод строки. var0=`expr $var0 + 1` # допускается var0=$(($var0+1)).doneechoexit


Пример 10-27. Простой пример сравнения строк

Из книги Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/FireBird/Yaffil автора Ковязин Алексей Николаевич

Пример 10-27. Простой пример сравнения строк #!/bin/bash# match-string.sh: простое сравнение строкmatch_string (){ MATCH=0 NOMATCH=90 PARAMS=2 # Функция требует два входных аргумента. BAD_PARAMS=91 [ $# -eq $PARAMS ] || return $BAD_PARAMS case "$1" in "$2") return $MATCH;; * ) return $NOMATCH;; esac}a=oneb=twoc=threed=twomatch_string $a # неверное число


Пример 25-1. Простой массив

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

Пример 25-1. Простой массив #!/bin/basharea[11]=23area[13]=37area[51]=UFOs# Массивы не требуют, чтобы последовательность элементов в массиве была непрерывной.# Некоторые элементы массива могут оставаться неинициализированными.# "Дыркм" в массиве не являются ошибкой.echo -n "area[11] = "echo ${area[11]} #


ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ

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

ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ Давайте рассмотрим простую программу на языке Си. Следует сразу сказать, что такой пример нужен нам лишь для выявления некоторых основных черт любой программы, написанной на языке Си. Далее мы дадим пояснения к каждой строке, но, перед


Простой пример

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

Простой пример Начнем с простого примера: наложим переход на изменение фона ссылки. Когда пользователь будет наводить на ссылку, цвет ее фона будет меняться, и мы применим переход, чтобы сделать это изменение плавным. Такого эффекта раньше можно было добиться


Простой пример

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

Простой пример Конечно, приведенный выше пример довольно сложен — ведь он написан на машинном языке и в шестнадцатиричном виде. Но его можно упростить, ведь отладчик в Windows XP поддерживает как ASCII-символы, так и язык «Ассемблера».Вот упрощением мы сейчас и займемся.


Простой пример использования сигнала SIGURG

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

Простой пример использования сигнала SIGURG Теперь мы рассмотрим тривиальный пример отправки и получения внеполосных данных. В листинге 24.1[1] показана программа отправки этих данных.Листинг 24.1. Простая программа отправки внеполосных данных//oob/tcpsend01.c 1 #include "unp.h" 2 int 3 main(int


Простой пример использования функции select

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

Простой пример использования функции select Теперь мы переделаем код нашего получателя внеполосных данных и вместо сигнала SIGURG будем использовать функцию select. В листинге 24.3 показана принимающая программа.Листинг 24.3. Принимающая программа, в которой (ошибочно)