Постоянно хранимые модули
Полномочия
В главе 13 рассматривались различные полномочия, предоставляемые пользователям. Владелец базы данных может предоставить другим пользователям следующие полномочия.
- На удаление записи из таблицы.
- На вставку записи в таблицу.
- На обновления записи в таблице.
- На создание ссылок на поля таблицы.
- На использование домена.
SQL/PSM добавляет к уже существующим еще один вид полномочий – полномочия на выполнение. Ниже приведены два примера.
GRANT EXECUTE on MatchScore to TournamentDirector; GRANT EXECUTE on PurchaseHistory to SalesManager;
Эти команды предоставляют возможность руководителю шахматного турнира вызывать процедуру MatchScore, а менеджеру по продажам компании – вызывать функцию Purchase-History. Пользователи, которые не имеют полномочий на выполнение подпрограммы, не могут ее использовать.
Хранимые модули
Хранимые модули (stored modules) могут содержать множество подпрограмм, т.е. процедур и (или) функций SQL. Каждый пользователь с полномочиями на выполнение модуля имеет доступ ко всем подпрограммам этого модуля. Полномочия на выполнение отдельных подпрограмм модуля предоставляться не могут. Ниже приведен пример хранимого модуля.
CREATE MODULE mod1 PROCEDURE MatchScore (IN white CHAR (20), IN black CHAR (20), IN result CHAR (3), OUT winner CHAR (5)) BEGIN ATOMIC CASE result WHEN '1-0' THEN SET winner = 'white'; WHEN '1-0' THEN SET winner = 'black'; ELSE SET winner = 'draw'; END CASE END; FUNCTION PurchaseHistory (CustID) RETURNS CHAR VARYING (200) BEGIN DECLARE purch CHAR VARYING (200) DEFAULT ''; FOR X AS SELECT * FROM transaction t WHERE t.cuStomerlD = CustID DO IF x.description <> '' THEN SET purch = purch | | '. '; END IF; SET purch = purch || x.description; END FOR RETURN purch; END; END MODULE;
Подпрограммы данного модуля никак не связаны между собой. Вообще говоря, подпрограммы можно разнести по разным модулям или собрать в один модуль, независимо от того, есть у них что-нибудь общее или нет.