create or replace procedure myTbl
 as
   lvDate varchar2(50);
   lvSql  varchar2(1000);
 begin
   lvsql := 'create table mytbl ( id  number(5))';
   dbms_output.put_line(lvsql);
   EXECUTE IMMEDIATE lvsql;
 end;1)以上需要8i及以上版本。
2)触发器的脚本,只是改变lvsql的内容

解决方案 »

  1.   

    在8i以上的,可以EXECUTE IMMEDIATE 
    否则只能调用dbma_sql包
      

  2.   

    dbma_sql包:
    CREATE OR REPLACE PROCEDURE exec(STRING IN varchar2) AS
        cursor_name INTEGER;
        ret INTEGER;
        str varchar2(500);
    BEGIN
       cursor_name := DBMS_SQL.OPEN_CURSOR;
       str:='create table test1 as select * from table_name';DDL statements are run by the parse call, which performs the implied commit.   DBMS_SQL.PARSE(cursor_name, str, DBMS_SQL.native);
       ret := DBMS_SQL.EXECUTE(cursor_name);
       DBMS_SQL.CLOSE_CURSOR(cursor_name);
    END;