Не создавайте таблицы из PL / SQL. Это возможно (подсказка: Dynami c SQL), но это не так, как Oracle работает.
Если вам нужна таблица, то создайте ее ПЕРЕД выполнением этой процедуры, либо с помощью CREATE TABLE
(и назовите все нужные столбцы), либо с помощью CTAS
(Create Table As Select), который - в основном - быть вашим текущим запросом.
Эта таблица может быть «нормальной» или «глобальной (или частной, в зависимости от версии базы данных) временной таблицей» (GTT). Если вы используете GTT, только вы можете видеть данные, хранящиеся в. Если это «нормальная» таблица, все видят данные, поэтому вам, возможно, придется обратить внимание на то, кто что видит и что использует.
Другой вариант - использовать CTE
(Common Table Expression, aka * факторинг WITH
), который можно использовать непосредственно в процедуре как
with your_view as
(select ...
from table1 join table2 on ...
join table3 on ...
)
select whatever
from some_other_table join your_view
where ...
union
select whatever_else
from yet_another_table join your_View
where ...
[РЕДАКТИРОВАТЬ, увидев ваше редактирование]
Если вы этого не сделаете Если вы хотите использовать CTE по какой-то причине, тогда GTT может быть вашим выбором. Почему? См. Мой третий абзац («каждый видит только свои данные»).