Why can't we write ddl statements directly in PL/SQL block, for example when i write
CREATE OR REPLACE PROCEDURE test IS
BEGIN
truncate table table_name; // error
END test;
/
But,
CREATE OR REPLACE PROCEDURE test IS
BEGIN
execute immediate 'truncate table table_name'; // works fine
END test;
/
Why second one executed successfully ?
Best Answer
As it says in the documentation:
A
TRUNCATE
operation isDDL
.When using
EXECUTE IMMEDIATE
, remember that anyDDL
operations you execute will implicitlyCOMMIT
the current transaction.