Язык PSQL
Материал из GedeminWiki
Версия от 17:54, 21 октября 2011; SYSDBA (обсуждение | вклад)
Язык 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, оператор конкатенции
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