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