表名是动态的
建表前先看数据库中是否存在相同名字的表,如果存在就删除之前的
在存储过程中动态执行SQL语句创建表
会SQLSERVER不会ORACLE啊,各位帮帮忙

解决方案 »

  1.   

    检查是否存在相同的表
    select COUNT(*) from tab where tname='表名' AND tabtype='TABLE'
    在存储过程中,需要先定义一个变量来接收COUNT(*),然后根据这个变量判断表是否存在
      

  2.   

    楼上的大哥,思路我知道,我不知道语法该怎么写
    以前都是用SQL,没用ORACLE,这个应该不是很难,帮忙写一下,让我以后有个参考啊
      

  3.   

    create or replace procedure tttt
    is
    ii number(10);
    strsql varchar2(2000);
    begin
      select COUNT(*) into ii from user_tables where table_name='T1';
      if ii>0 then
         strsql := 'drop table T1';
         execute immediate strsql;
      end if;
      
      strsql := 'create table T1(AA  varchar2(10),
                                 BB  varchar2(100),
                                 CC  varchar2(10))';
      execute immediate strsql;
              
                         
    end;
      

  4.   

    可以有多个同名的table吗?
    为什么要 select COUNT(*) into ii from user_tables where table_name='T1';
      

  5.   

    当然不能有同名的。select COUNT(*) into ii from user_tables where table_name='T1';
    检查t1这个表是否存在。
      

  6.   

    create or replace procedure ex_dsql_ddldcl(pTableName varchar2) 
        authid current_user is

    sqlStatement varchar2(200);
    begin
    dbms_output.put_line('create table ' || pTableName || ' ...');
    sqlStatement:='create table '|| pTableName ||' ( ' 
    ||' time_key  timestamp(3) primary key, '
    ||' eqp_id char(6) not null, '
    ||' lot_id char(10) not null, '
    ||' spc_value number default 0 not null'
    ||') ';
    execute immediate sqlStatement;

    dbms_output.put_line('create table ' || pTableName || ' success.');
    exception
    when others then
    dbms_output.put_line(sqlerrm);
    raise;
    end;