Создание представления базы данных из динамической строки c (EXECUTE IMMEDIATE) в пакете PL / SQL - Вопросы? - PullRequest
0 голосов
/ 04 февраля 2020

Я хочу создать динамическое представление c во время выполнения, состоящее из строки столбцов и предложения where с использованием EXECUTE IMMEDIATE для одной базы данных, которая будет запрашиваться во второй базе данных с помощью db_link.

My Вопрос заключается в следующем.

  1. Представление будет запрошено в другой базе данных с использованием database_link. Мне также необходимо предоставить привилегии GRANT для представления (например, PUBLI C) и SYNONYM (как ПУБЛИ C) одновременно (если вообще)? или это нужно создать только один раз?

  2. Может ли пакет быть недействительным, если в пакете PL / SQL есть ссылка на объект в другой базе данных через ссылку на базу данных что не существует, является недействительным или изменилось в структуре? Или он компилируется независимо?

  3. Я предполагаю, что мне понадобится "CREATE OR REPLACE VIEW" в строке EXECUTE IMMEDIATE, так как при втором запуске этого процесса представление уже будет существовать в базе данных?

Заранее благодарим ребят за любые отзывы.

1 Ответ

0 голосов
/ 04 февраля 2020

Прежде всего, я бы посоветовал вам не делать этого. В Oracle объекты создаются один раз и используются в любое время . Какую выгоду вы ожидаете от динамического создания представления? (Я не говорю, что вы не должны делать это, просто предлагаю подумать).

Теперь, чтобы ответить на ваши вопросы:

  1. Вы GRANT не требуется, потому что - для создания ссылки на базу данных вы уже знаете имя пользователя и пароль удаленной базы данных
  2. Если объект в другой базе данных недействителен, то выполнение или компиляция вашей процедуры завершится неудачей
  3. Да, поскольку без or replace Oracle будет жаловаться, что объект с таким именем уже существует.
...