my_query varchar2(900);   
 my_query:='create global temporary table tmp_A 
 as select *  from B  where 1=2  ';
 EXECUTE IMMEDIATE my_query; 
--创建临时表的

解决方案 »

  1.   

    create table 也是可以的啊
      

  2.   

    我是这样写的:create table tablename as select * from tablename 
    为什么在存储过程里会出错呢?
    单独拿出来执行却没有问题
      

  3.   

    --给你一个例子看看,仿照着写.
    create or replace function test return varchar2 as
        v_cursor number;
        v_string varchar2(200);
        v_row number;
    begin
        v_cursor:=dbms_sql.open_cursor;
        --v_string:='update fnd_user a set a.description=''丁亚军'' where a.user_id=1055';
        v_string:='create table testdb (text varchar2(200))';
        dbms_sql.parse(v_cursor,v_string,dbms_sql.native);
        v_row:=dbms_sql.execute(v_cursor);
        dbms_sql.close_cursor(v_cursor);
        return ('成功执行');
        exception
            when others then
                dbms_sql.close_cursor(v_cursor);
                return ('执行失败!'||sqlcode||sqlerrm);
                raise;
    end;
      

  4.   

    在存储过程里,DML语句必须用EXECUTE IMMEDIATE 
    EXECUTE IMMEDIATE 'create table tablename as select * from tablename'
    这样就行了。
    删表也是一样。
      

  5.   

    这个例子保你成功!CREATE OR REPLACE PROCEDURE Test1 IS
      v_Sql         VARCHAR2(200); 
      Cursor_create VARCHAR2(100);
      Result        NUMBER;
    BEGIN      
          v_Sql := '
                CREATE TABLE T1
                (
                 A VARCHAR2(200)
                )
                ';
          
          cursor_create := dbms_sql.open_cursor;
          DBMS_SQL.PARSE(cursor_create, v_SQL,dbms_sql.native);
          Result := dbms_sql.EXECUTE(cursor_create);
          DBMS_SQL.close_cursor(cursor_create);END Test1;
      

  6.   

    一般的存储过程,只能执行select, insert, update, delete等语句,create table这类语句必须用动态游标执行,也就是dbms_sql的包方法执行。上面的例子已经很清楚了。仿照着写吧。
      

  7.   

    动态sql语句请使用execute immediate
      

  8.   

    http://community.csdn.net/Expert/topic/3132/3132037.xml?temp=.2402613
    去留个QQ吧!!!!
      

  9.   

    在oracle过程中只能用动态sql来生成,如execute immediate 'create table tab_name(id varchar2(2))';