Язык 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