Язык PSQL

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
(Новая страница: «Язык '''PSQL (Procedural SQL)''' сервера Firebird предназначен для создания в базе данных триггеров, хра…»)
 
Строка 51: Строка 51:
  
 
===Цикл по результатам выборки, оператор FOR, оператор конкатенции===
 
===Цикл по результатам выборки, оператор FOR, оператор конкатенции===
 +
 +
Подсчитываем общее количество записей в таблице [[GD_CONTACT]] и количество записей с указанным номером телефона:
  
 
<syntaxhighlight lang="SQL">
 
<syntaxhighlight lang="SQL">
Строка 93: Строка 95:
 
[[Category:База данных]]
 
[[Category:База данных]]
 
[[Category:Учебный курс]]
 
[[Category:Учебный курс]]
 +
 +
__NOTOC__

Версия 18:07, 21 октября 2011

Язык PSQL (Procedural SQL) сервера Firebird предназначен для создания в базе данных триггеров, хранимых процедур или написания блоков кода, выполняемых с помощью команды EXECUTE BLOCK.

Hello World!

EXECUTE BLOCK
  RETURNS(s VARCHAR(80))
AS
BEGIN
  s = 'Hello World!';
  SUSPEND;
END

Входящие параметры и конструкция IF

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

EXECUTE BLOCK (p1 INTEGER = :a, p2 INTEGER = :b)
  RETURNS(m INTEGER)
AS
BEGIN
  IF (:p1 < :p2) THEN
    m = :p1;
  ELSE
    m = :p2;
  SUSPEND;
END

Локальные переменные и цикл WHILE

Выводим все целые числа в диапазоне от a до b:

EXECUTE BLOCK (a INTEGER = :from_value, b INTEGER = :to_value)
  RETURNS(c INTEGER)
AS
  DECLARE VARIABLE i INTEGER;
BEGIN
  i = :a;
  WHILE (:i <= :b) DO
  BEGIN
    c = :i;
    i = :i + 1;
    SUSPEND;
  END
END

Цикл по результатам выборки, оператор FOR, оператор конкатенции

Подсчитываем общее количество записей в таблице GD_CONTACT и количество записей с указанным номером телефона:

EXECUTE BLOCK
  RETURNS(s VARCHAR(200))
AS
  DECLARE VARIABLE C INTEGER = 0;
  DECLARE VARIABLE WITH_PHONE INTEGER = 0;
  DECLARE VARIABLE PHONE VARCHAR(60);
BEGIN
  FOR
    SELECT phone FROM gd_contact
    INTO :phone
  DO BEGIN
    c = :c + 1;
    IF (COALESCE(:phone, '') > '') THEN
      with_phone = :with_phone + 1;
  END
  s = 'Всего записей: ' || :c || ', из них с номером телефона: ' || :with_phone;
  SUSPEND;
END

Обработка ошибок

EXECUTE BLOCK (a INTEGER = :a, b INTEGER = :b)
  RETURNS(s VARCHAR(200))
AS
BEGIN
  s = :a / :b;
  SUSPEND;
 
  WHEN ANY DO
  BEGIN
    s = 'Деление на ноль!';
    SUSPEND;
  END
END
Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты