Язык PSQL
Материал из GedeminWiki
(Различия между версиями)
SYSDBA (обсуждение | вклад) (Новая страница: «Язык '''PSQL (Procedural SQL)''' сервера Firebird предназначен для создания в базе данных триггеров, хра…») |
SYSDBA (обсуждение | вклад) |
||
| Строка 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