Написать триггер для базы данных Oracle
1 300 руб. за проект
Предыстория:
В базе данных Oracle существует две схемы (дальше буду обозначать их С1 и С2).
В С1 хранится несколько тысяч таблиц, С2 имеет доступ (только на SELECT) к примерно половине из них (но не ко всем!). В силу ряда "исторически сложившихся" обстоятельств, взаимодействие между схемами построено на публичных синонимах (PUBLIC SYNONYM). У С2 собственных таблиц нет. У С1 есть привилегия на создание публичных синонимов.
В последнее время в С1 пользователи начали активно создавать новые таблицы. Вручную давать права для С2 и создавать публичные синонимы стало немного муторно.
Задача:
Разработать триггер для С1, который будет при создании новой таблицы в С1:
1) Давать С2 права на SELECT к данной таблице;
2) Создавать новый глобальный синоним для созданной таблицы. Имя публичного синонима соответствует имени новой таблицы. Допускается использовать CREATE OR REPLACE.
Тестирование будет достаточно простым:
1. В С1 создаётся новая таблица "new_table", добавляются несколько записей;
2. По учётной записью С2 выполняется запрос SELECT * FROM new_table. Запрос должен вернуть все записи, добавленные в новую таблицу.
3. Под учётной записью C2 выполняется запрос SELECT * FROM ALL_SYNONYMS WHERE owner='PUBLIC' AND synonym_name='new_table'. Запрос должен вернуть одну запись с новым публичным синонимом.
Разумеется, что вместо "new_table" мною может быть использовано абсолютно любое имя таблицы, синтаксически допустимое Oracle. В триггере имя таблицы в явном виде использоваться не должно.
В базе данных Oracle существует две схемы (дальше буду обозначать их С1 и С2).
В С1 хранится несколько тысяч таблиц, С2 имеет доступ (только на SELECT) к примерно половине из них (но не ко всем!). В силу ряда "исторически сложившихся" обстоятельств, взаимодействие между схемами построено на публичных синонимах (PUBLIC SYNONYM). У С2 собственных таблиц нет. У С1 есть привилегия на создание публичных синонимов.
В последнее время в С1 пользователи начали активно создавать новые таблицы. Вручную давать права для С2 и создавать публичные синонимы стало немного муторно.
Задача:
Разработать триггер для С1, который будет при создании новой таблицы в С1:
1) Давать С2 права на SELECT к данной таблице;
2) Создавать новый глобальный синоним для созданной таблицы. Имя публичного синонима соответствует имени новой таблицы. Допускается использовать CREATE OR REPLACE.
Тестирование будет достаточно простым:
1. В С1 создаётся новая таблица "new_table", добавляются несколько записей;
2. По учётной записью С2 выполняется запрос SELECT * FROM new_table. Запрос должен вернуть все записи, добавленные в новую таблицу.
3. Под учётной записью C2 выполняется запрос SELECT * FROM ALL_SYNONYMS WHERE owner='PUBLIC' AND synonym_name='new_table'. Запрос должен вернуть одну запись с новым публичным синонимом.
Разумеется, что вместо "new_table" мною может быть использовано абсолютно любое имя таблицы, синтаксически допустимое Oracle. В триггере имя таблицы в явном виде использоваться не должно.
Отзывы
Самые наилучшие впечатления от работы с Александром. Заказ выполнен в полном объеме. Отдельно отмечу уровень владения Oracle, благодаря которому было предложено оригинальное решение.
11 месяцев
назад
В заказе есть исполнитель
При переводе заказа из архивного в актуальный, текущий исполнитель будет снят с задачи.
Выберите тип сделки
С безопасной сделкой вы всегда сможете вернуть средства, если что-то пойдет не так. С простой сделкой вы самостоятельно договариваетесь с исполнителем об оплате и берете на себя решение конфликтов.