在PL/SQL块中不能直接执行DDL语句
(后篇批量删除表时却明明在PL/SQL块中使用了DROP,而且执行成功,厄...自打三十大板...谁来救我...)
如上执行将报错。
虽然PL/SQL块不可以直接执行DDL命令,但是可以通过DBMS_OUTPUT程序包执行。
(后篇批量删除表时却明明在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;
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;
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>
Name Type Nullable Default Comments
---- ------------ -------- ------- --------
KH VARCHAR2(10) Y
NYR VARCHAR2(10) Y
SQL>
转载于:https://blog.51cto.com/dongdong1314/207982