Язык PSQL

Материал из GedeminWiki
Перейти к: навигация, поиск

Язык 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
Персональные инструменты
Пространства имён

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