可以动态创建 dbms_sql 包

解决方案 »

  1.   

    create or replace procedure p_create_table(
      v_sql    varchar2
    )
    is
       cursor_name integer;
       v_rows      integer;
    begin
       cursor_name := DBMS_SQL.OPEN_CURSOR;
       DBMS_SQL.PARSE(cursor_name, v_sql, dbms_sql.v7);
       v_rows := DBMS_SQL.EXECUTE(cursor_name);
       DBMS_SQL.CLOSE_CURSOR(cursor_name);
    end;
    /declare
      v_sql varchar2(1000);
    begin
      v_sql := 'create table test
    (
    field_name1 char(10) null,
    field_name2 int null
    )';
      p_create_table(v_sql);
    end;
    /