Язык PSQL

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
 
Строка 1: Строка 1:
Язык '''PSQL (Procedural SQL)''' сервера [[Firebird]] предназначен для создания в базе данных триггеров, хранимых процедур или написания блоков кода, выполняемых с помощью команды '''EXECUTE BLOCK'''.
+
Язык '''PSQL (Procedural SQL)''' сервера [[Firebird]] предназначен для создания в базе данных триггеров, хранимых процедур или написания блоков кода, выполняемых с помощью команды '''EXECUTE BLOCK'''.  
  
 
===Hello World!===
 
===Hello World!===
Строка 30: Строка 30:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
===Локальные переменные и цикл WHILE===
+
===Цикл WHILE===
  
 
Выводим все целые числа в диапазоне от a до b:
 
Выводим все целые числа в диапазоне от a до b:
Строка 38: Строка 38:
 
   RETURNS(c INTEGER)
 
   RETURNS(c INTEGER)
 
AS
 
AS
  DECLARE VARIABLE i INTEGER;
 
 
BEGIN
 
BEGIN
   i = :a;
+
   c = :a;
   WHILE (:i <= :b) DO
+
   WHILE (:c <= :b) DO
 
   BEGIN
 
   BEGIN
    c = :i;
 
    i = :i + 1;
 
 
     SUSPEND;
 
     SUSPEND;
 +
    c = :c + 1;
 
   END
 
   END
 
END
 
END

Текущая версия на 19:19, 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
BEGIN
  c = :a;
  WHILE (:c <= :b) DO
  BEGIN
    SUSPEND;
    c = :c + 1;
  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
Персональные инструменты
Пространства имён

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