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