建表的操作可以试着用动态sql完成execute immediate 'CREATE TABLE table_name
(co1      datatype,
 co2    ,
 ORGN_NAME      VARCHAR2(40),
 SALESREP_ID    NUMBER,
 NAME           VARCHAR2(240)
 )';

解决方案 »

  1.   

    建表的操作可以试着用动态sql完成execute immediate 'CREATE TABLE table_name
    (co1      datatype,
     co2      datatype )';至于不能使用commit,那是说在pl/sql中,数据库触发器不能带有commit(如果是要完成建表而commit,那么在这个触发器里面不用commit,当整个操作被提交时,create命令也被提交),如果这个触发器在应用层被触发,则可以在里面写commit.也不是很懂,大家指正哦PS:上面那个贴子弄错了,怎么删掉呀
      

  2.   

    要动态建表,另一种方法是用包DBMS_SQL,
    declare
    v_cursor_id number;
    v_retval number;
    begin
       v_cursor_id := dbms_sql.open_cursor;
       dbms_sql.parse(v_cursor_id,
       'create table tablename(id integer,
       name varchar2(8))',dbms_sql.native);
       v_retval := dbms_sql.execute(v_cursor_id);
       dbms_sql.close_cursor(v_cursor_id);
    end;
    建完表之后,自动就commit,不用另外再写。
      

  3.   

    trigger里面不可以使用commit;
    个人觉得trigger里用commit没有必要 .
      

  4.   

    可能是楼主的版本问题,8i以上才支持execute immediate 语法
    8i以下用dbms_sql包
      

  5.   

    to all:我使用的方式是动态创建表。但是,返回的错误是不能commit。因为create table本身包含commit操作的。是不是用trigger就不可能创建表了。