Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

SQL | Можно ли создавать представление внутри хранимой процедуры?

Можно ли создавать представление внутри хранимой процедуры или только вне её?

По дате
По рейтингу
Аватар пользователя
Мыслитель

Во-первых, как сказал уважаемый Дед Мазай, можно запихнуть код создания в строку и вызвать execute immediate. Крайне "дырявый" с точки зрения безопасности метод. Я слышал, что иногда его отключают.
Во-вторых, некоторые (не все) СУБД позволят Вам напрямую в код хранимой процедуры внести строчки "Create View"
В-третьих, Вы можете напрямую работать с таблицами системной базы данных, в которых хранится структура всех баз данных этого сервера. (крайне геморройный метод и опять, не все СУБД позволят).
НО. Зачем Вам это надо? Создание представления относится к уровню изменения структуры базы данных. Как правило, простые пользователи БД не имеют таких прав и ваша хранимая процедура не будет работать. Конечно можно запускать процедуру с правами создателя. Но не все админы позволят поставить такую процедуру.
Вы уверены, что нет другого решения Вашей проблемы?

Аватар пользователя
Гений

Думаю, это зависит от СУБД. Обычно это возможно, но так не делают. Хранимая процедура должна работать с данными, а не изменять структуру БД.
Например, в Oracle можно создать представление (или ещё что-то) хранимой процедурой. Но это нельзя просто так написать, как обычный SQL. "create view" надо запихнуть в строку, и выполнить эту строку (с помощью execute immediate или как-то ещё)