Вы должны знать, что невозможно напрямую выполнить инструкцию DDL, как вы делаете для DML из блока PL / SQL, потому что PL / SQL не поддерживает позднюю привязку напрямую, она поддерживает только привязку во время компиляции, что хорошо для DML. следовательно, чтобы преодолеть этот тип проблемы, оракул предоставил подход динамического SQL, который можно использовать для выполнения операторов DDL. Подход динамического sql заключается в анализе и связывании строки sql во время выполнения.
Также вы должны помнить, что операторы DDL по умолчанию являются автоматическими коммитами, поэтому вы должны быть осторожны с любым оператором DDL, использующим подход динамического SQL, если у вас есть некоторый DML (который должен быть зафиксирован явно с использованием TCL) перед выполнением DDL в сохраненная процедура / функция.
Вы можете использовать любой из следующих динамических подходов SQL для выполнения инструкции DDL из блока pl / sql.
1) Выполнить немедленно
2) Пакет DBMS_SQL
3) DBMS_UTILITY.EXEC_DDL_STATEMENT (parse_string IN VARCHAR2);
Надеюсь, это ответит на ваш вопрос с объяснением.