возможно? Да. Рекомендуемые? №
Для любого DDL вам придется использовать динамический SQL (EXECUTE IMMEDIATE
). Если запросы сложные, эти команды будет сложно поддерживать.
INSERT
- это DML, но вы не можете использовать его в функции , если только это не автономная транзакция (и вам придется зафиксировать (или выполнить откат) внутри функции).
Если бы это была процедура , вы бы - по крайней мере - избежали последней проблемы, которую я упомянул. Если вы возвращаете что-то , используйте параметр OUT
.
Вы не можете вместо этого использовать (глобальную) временную таблицу? Создайте его один раз, используйте его много раз. Я понимаю, что ваш код может быть очень сложным и, возможно, он действительно не может вписаться в один оператор SELECT
, но вы должны - по крайней мере - попытаться выполнить эту работу в духе Oracle (то есть это не MS SQL Server) ,