Мир InterBase



Циклы и операторы ветвления


Помимо команды FOR SELECT... DO, организующей цикл по записям какой-либо выборки, существует другой вид цикла - WHILE...DO, который позволяет организовать цикл на основе проверки любых условий. Вот пример ХП, использующей цикл WHILE.. DO. Эта процедура возвращает квадраты целых чисел от 0 до 99:

CREATE PROCEDJRE QUAD 

RETURNS (QUADRAT INTEGER) 

AS

DECLARE VARIABLE I INTEGER; 

BEGIN 

I = 1;

WHILE (i<100) DO 

BEGIN

QUADRAT= I*I;

I=I+1; 

SUSPEND; 

END 

END

В результате выполнения запроса SELECT • FROM QUAD мы получим таблицу, содержащую один столбец QUADRAT, в котором будут квадраты целых чисел от 1 до 99

Помимо перебора результатов SQL-выборки и классического цикла, в языке хранимых процедур используется оператор IF...THEN..ELSE, позволяющий организовать ветвление в зависимости от выполнения каких-либо \словий Его синтаксис похож на большинство операторов ветвления в языках программирования высокого уровня, вроде Паскаля и Си.

Давайте рассмотрим более сложный пример хранимой процедуры, которая делает следующее.

  • Вычисляет среднюю цену в таблице Table_example (см. глава "Таблицы Первичные ключи и генераторы")
  • Далее для каждой записи в таблице делает след>ющ)ю проверку, если существующая цена (PRICE) больше средней цены, то устанавливает цену, равную величине средней цены, плюс задаваемый фиксированный процент
  • Если существующая цена меньше или равна средней цене, то устанавливает цену, равную прежней цене, плюс половина разницы между прежней и средней ценой.

  • Возвращает все измененные строки в таблице.
  • Для начала определим имя ХП, а также входные и выходные параметры Все это прописывается в заголовке хранимой процедуры

    CREATE PROCEDURE IncreasePrices (

    Percent2lncrease DOUBLE PRECISION)

    RETURNS (ID INTEGER, NAME VARCHAR(SO), new_price DOUBLE

    PRECISION) AS

    Процедура будет называться IncreasePrices, у нее один входной параметр Peiceni21nciease, имеющий тип DOUBLE PRECISION, и 3 выходных параметра - ID, NAME и new_pnce. Обратите внимание, что первые два выходных параметра имеют такие же имена, как и поля в таблице Table_example, с которой мы собираемся работать Это допускается правилами языка хранимых процедур.




    Содержание  Назад  Вперед