Иллюстрированный самоучитель по SQL для начинающих

Постоянно хранимые модули

Полномочия

В главе 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;

Подпрограммы данного модуля никак не связаны между собой. Вообще говоря, подпрограммы можно разнести по разным модулям или собрать в один модуль, независимо от того, есть у них что-нибудь общее или нет.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.