Язык PSQL

Цель

Изучить возможности языка PSQL и научится создавать хранимые процедуры, хранимые функции и триггеры различных событий.

Порядок выполнения

1. Используя БД employee.fdb разработайте следующие объекты БД.

2. Создайте хранимую функцию, которая проверяет, является ли число простым.

Например, запрос

SELECT IS_SIMPLE(NULL) FROM RDB$DATABASE
UNION ALL
SELECT IS_SIMPLE(2) FROM RDB$DATABASE
UNION ALL
SELECT IS_SIMPLE(4) FROM RDB$DATABASE
UNION ALL
SELECT IS_SIMPLE(17) FROM RDB$DATABASE

должен вернуть

IS_SIMPLE
NULL
TRUE
FALSE
TRUE

3. Создайте функцию, которая рекурсивно вычисляет факториал своего аргумента.

Запрос

SELECT FACT(0) FROM RDB$DATABASE
UNION ALL
SELECT FACT(1) FROM RDB$DATABASE
UNION ALL 
SELECT FACT(2) FROM RDB$DATABASE
UNION ALL 
SELECT FACT(3) FROM RDB$DATABASE
UNION ALL 
SELECT FACT(9) FROM RDB$DATABASE

должен вернуть

FACT
1
1
2
6
362880

4. Создайте хранимую процедуру, которая вычисляет факториалы чисел от 0 до 9 включительно и использует функцию задания 2.

Запрос

SELECT * FROM FACT10

должен вернуть

IF
01
11
22
36
424
5120
6720
75040
840320
9362880

5. Создайте хранимую процедуру, которая удаляет строки указанной таблицы, содержащие дубликаты в указанном столбце.

Например, для таблицы

CREATE TABLE DUP (
    I INTEGER,
    S VARCHAR(2));

Содержащей данные с дубликатами в столбце I,

IS
1a
1b
2b
2c
3c
4d
5e

Вызов процедуры

EXECUTE PROCEDURE DEDUP();

Должен оставить в таблице только эти строки

IS
1a
2b
3c
4d
5e

6. Сделайте триггер на логирование удаления записи в таблице EMPLOYEE.

Триггер должен сохранять в таблицу EMP_HISTORY дату удаления и полное имя сотрудника.

Тогда после выполнения запроса

UPDATE EMPLOYEE SET LAST_NAME = 'SMITH' WHERE EMP_NO = 2;

Таблица EMP_HISTORY должна содержать

OLDLASTNAMENEWLASTNAMEDEL_TIME
NelsonSmith2025-04-12T23:29:44.414

7. Сделайте триггер, которые не дает подключаться в четные минуты

При попытке подключения в четную минуту, пользователь должен получать ошибку Bad time.

Полезная информация