create or replace PROCEDURE  PROC_TEST   AS     
  str   varchar2(1000);   
  BEGIN     
  str:=' CREATE  or replace  GL0BAL   TEMPORARY   TABLE   tttttttttt(     
                                                          a   integer   not   null,     
                                                          b   varchar2(12))   
                                                          ON   COMMIT   PRESERVE   ROWS';     
  execute   immediate   str;   
  end;   连接到数据库 system。
ORA-00922: 选项缺失或无效
ORA-06512: 在 "SYSTEM.PROC_TEST", line 8
ORA-06512: 在 line 2
进程已退出。
从数据库 system 断开连接。

解决方案 »

  1.   

    CREATE  or replace  GL0BAL  TEMPORARY  TABLE  tttttttttt(    
                                                              a  integer  not  null,    
                                                              b  varchar2(12))  
                                                              ON  COMMIT  PRESERVE  ROWS;
    這句單獨執行是否會有問題?
      

  2.   

    global你写错了
    o写成了数字0
      

  3.   

    谢谢,为什么创建临时表不能用create or replace  , 临时表也需要删除吗?
      

  4.   

    create or replace PROCEDURE  PROC_TEST  AS    
      str  varchar2(1000);  
      BEGIN    
      str:='   CREATE    GLoBAL    TEMPORARY  TABLE  kkkkkkkkk(    
                                                              a  integer  not  null,    
                                                              b  varchar2(12))  
                                                              ON  COMMIT  PRESERVE  ROWS';    
      execute  immediate  str; 
     
      --EXECUTE immediate ('drop table kkkkkkkkk');
     
      end;  EXECUTE immediate ('drop table kkkkkkkkk');注释掉,就只能执行一次 第二次就出现 ORA-00955: 名称已由现有对象使用。
      

  5.   

    建表不能用replace的create or replace可以用在procedure, function, package上面临时表是否删除看你自己,一般是不用的
      

  6.   

    那为什么这个存储过程只能执行一次呢, 要想执行第二次就得先执行 drop table kkkkkkkkk ,帮忙再看看。
    create or replace PROCEDURE  PROC_TEST  AS    
      str  varchar2(1000);  
      BEGIN    
      str:='   CREATE    GLoBAL    TEMPORARY  TABLE  kkkkkkkkk(    
                                                              a  integer  not  null,    
                                                              b  varchar2(12))  
                                                              ON  COMMIT  PRESERVE  ROWS';    
      execute  immediate  str; 
     
      --EXECUTE immediate ('drop table kkkkkkkkk');
     
      end;  
      

  7.   

    具体到这个过程,再次执行的时候这个表已经存在了所以没法创建. 用完drop掉吧。
      

  8.   

    谢谢,刚开始研究,感觉比sqlserver存储过程难多了