Руководство по языку sql
Download 1.22 Mb. Pdf ko'rish
|
Firebird3 SQL features
GRANT SELECT ON TABLE secret TO PACKAGE pk_secret;
GRANT EXECUTE ON PACKAGE pk_secret TO ROLE role_secret; Разрешение «частных областей видимости» Эта цель состоит в том, чтобы сделать некоторые процедуры частными (private ), а именно разрешить их использование только внутри определения пакета. Все языки программирования имеют понятие области видимости подпрограмм, которое невозможно без какой-либо формы группировки. Пакеты Firebird в этом отношении подобны модулям Delphi. Если подпрограмма не объявлена в заголовке пакета (interface), но реализована в теле (implementation), то такая подпрограмма становится частной (private). Частную подпрограмму возможно вызвать только из еѐ пакета. Синтаксис: ::= { CREATE [OR ALTER] | ALTER | RECREATE } PACKAGE AS BEGIN [ ... ] END ::= ; FUNCTION )] RETURNS ::= PROCEDURE ) [RETURNS ( )]] Новые возможности языка SQL Firebird 3.0 54 ::= { CREATE | RECREATE } PACKAGE BODY AS BEGIN [ ... ] [ ... ] END ::= FUNCTION )] RETURNS AS BEGIN ... END | FUNCTION )] RETURNS EXTERNAL NAME ' ::= PROCEDURE ) [RETURNS ( )]] AS BEGIN ... END | PROCEDURE ) [RETURNS ( )]] EXTERNAL NAME ' DROP PACKAGE DROP PACKAGE BODY Правила: В теле пакеты должны быть реализованы все подпрограммы, стой же сигнатурой, что и объявленные в заголовке и в начале тела пакета. Значения по умолчанию для параметров процедур не могут быть переопределены (которые указываются в ). Это означает, что они могут быть в только для частных процедур, которые не были объявлены. Замечания: Новые возможности языка SQL Firebird 3.0 55 Перед удалением заголовка пакета (DROP PACKAGE), необходимо выполнить удаление тела пакета (DROP PACKAGE BODY). Исходный код тела пакета сохраняется после ALTER / RECREATE PACKAGE. Столбец RDB$PACKAGES.RDB$VALID_BODY_FLAG отображает состояние тела пакета. UDF деклараций (DECLARE внешняя функция) в настоящее время не поддерживается внутри пакетов. Желательно чтобы имена хранимых процедур и функций пакета не пересекались с именами хранимых процедур и функций из глобального пространства имѐн, хотя это и допустимо. Дело в том, что в настоящее время вы не сможете вызвать функцию/процедуру из глобального пространства имѐн внутри пакета, если в пакете объявлена одноимѐнная функция/процедура. В этом случае всегда будет вызвана процедура/функция пакета. Примеры: 1. Пример простого пакета Download 1.22 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling