在PL/SQL块中不能直接执行DDL语句
(后篇批量删除表时却明明在PL/SQL块中使用了DROP,而且执行成功,厄...自打三十大板...谁来救我...)
declare
    v_string    varchar2(1000);
begin
    v_string:= 'create table dm_test as    select * from dm_mpg_test where nyr=20080101;';
     execute immediate v_string;
end;
如上执行将报错。

虽然PL/SQL块不可以直接执行DDL命令,但是可以通过DBMS_OUTPUT程序包执行。
declare
             v_cursor integer;
             v_sql varchar2(500);
             v_tablename varchar2(10) := 'dm_test';
             v_tablecolumn varchar2(100) := 'kh varchar2(10),nyr varchar(10)';
begin
     v_cursor:=dbms_sql.open_cursor;
     v_sql:= 'CREATE TABLE ' || v_tablename || ' ( ' || v_tablecolumn || ' )';
     dbms_sql.parse(v_cursor, v_sql, dbms_sql.v7);
     dbms_sql.close_cursor(v_cursor);
    
end;
SQL> desc dm_test;
Name Type                 Nullable Default Comments
---- ------------ -------- ------- --------
KH     VARCHAR2(10) Y                                                
NYR    VARCHAR2(10) Y                                                

SQL>