Управление коллекциями уровня схемы в PL/SQL

Коллекция уровня схемы в PL/SQLИнформация, приведенная в этой заметке моего блога, возможно не столь очевидна. Она поможет вам в работе с вложенными таблицами и VARRAY. Эти служебные аспекты не актуальны при работе с ассоциативными массивами.

 

Необходимые привилегии

Типы данных коллекций PL/SQL, находящиеся в базе данных, могут совместно использоваться несколькими пользователями. Как нетрудно догадаться, в совместном использовании задействованы привилегии. К счастью, ситуация не так сложна; к типам коллекций относится только одна привилегия Oracle — EXECUTE. Если вы, пользователь Scott, хотите разрешить пользователю Joe использовать тип color_tab_t в его программах, достаточно предоставить ему привилегию EXECUTE:

 

GRANT EXECUTE on color_tab_t TO JOE;

После этого Джо сможет использовать тип в синтаксисе схема.тип. Пример:

CREATE TABLE my_stuff_to_paint (
   which_stuff VARCHAR2(512),
   paint_mixture SCOTT.color_tab_t
   )
NESTED TABLE paint_mixture STORE AS paint_mixture_st; 

Привилегии EXECUTE также необходимы пользователям для запуска анонимных блоков PL/SQL, использующих объектный тип. Это одна из причин, по которым рекомендуется назначать имена модулям PL/SQL — пакетам, процедурам, функциям.

Для таблиц, включающих столбцы коллекций, традиционные привилегии SELECT, INSERT, UPDATE и DELETE имеют смысл, пока не потребуется построить коллекцию в PL/SQL для какого-либо из столбцов. Но если пользователь собирается выполнить команду INSERT или UPDATE для содержимого столбца коллекции, он должен иметь привилегию EXECUTE для типа, потому что это необходимо для использования конструктора по умолчанию.

 

Коллекции и словарь данных

База данных Oracle поддерживает несколько представлений словарей данных, которые предоставляют информацию о типах коллекций VARRAY и вложенных таблиц (табл. 1).

Для получения ответа на вопрос... …используется
представление…
как в следующем примере
Какие типы коллекций я создал? ALL_TYPES SELECT type_name
FROM all_types
WHERE owner = USER
AND typecode ='COLLECTION';
Как выглядело исходное определение типа коллекции Foo_t? ALL_SOURCE SELECT text
FROM all_source
WHERE owner = USER
AND name = 'FOO_T'
AND type = 'TYPE'
ORDER BY line;
Какие столбцы реализуют Foo_t? ALL_TAB_COLUMNS SELECT table_name,column_name
FROM all_tab_columns
WHERE owner = USER
AND data_type = 'FOO_T';
Какие объекты базы данных зависят от Foo_t? ALL_DEPENDENCIES SELECT name, type
FROM all_dependencies
WHERE owner = USER
AND referenced_name='FOO_T';

 

Вас заинтересует / Intresting for you:

Управление приложениями PL/SQL...
Управление приложениями PL/SQL... 3068 просмотров Stas Belkov Thu, 16 Jul 2020, 06:20:48
Встроенные методы коллекций PL...
Встроенные методы коллекций PL... 6920 просмотров sepia Tue, 29 Oct 2019, 09:54:01
Основы языка PL/SQL: использов...
Основы языка PL/SQL: использов... 3000 просмотров Ирина Светлова Tue, 06 Feb 2018, 14:04:03
Работа с числами в PL/SQL на п...
Работа с числами в PL/SQL на п... 16202 просмотров Antoniy Mon, 28 May 2018, 16:45:11
Войдите чтобы комментировать