orcale中如何判断一张数据表已经存在drop table if exists SN0082;这句话为什么总是报错。
请问该怎么写?

解决方案 »

  1.   

    你就直接drop table exists SN0082好了
    管它是否存在,一律先删后建
      

  2.   

    强!!!!!!select count(*) from user_tables s where s.table_name='yourTAbleName';
    如果返回值=1;
    drop talbe yourTAbleName;
      

  3.   

    如果仅仅是写维护脚本,可以直接drop表不判断,如果表不存在会报一个错误然后不影响下面语句的执行。如果一定要想判断,可以写过存储过程来执行删除表,输入参数是表的名字,在存储过程中判断表是否存在,存在就删除表(用动态SQL),否则什么也不做。判断当前用户下的某个表是否存在可以查user_tables,如果是要判断其他用户的要查all_tables。
      

  4.   

    declare
    aa number;
    begin
    select count(1) into aa from user_tables s where s.table_name='yourTAbleName'; 
    if aa>1 then
    drop table yourTAbleName;
    end if
    end;
      

  5.   

    创建存储过程:
    CREATE OR REPLACE PROCEDURE drop_table(
      v_tablename IN VARCHAR2
    )
    IS
      CURSOR c1
      IS
        SELECT table_name FROM user_tables;
    BEGIN
      FOR c1_rec IN c1 LOOP
        IF v_tablename = c1_rec.table_name THEN 
          EXECUTE IMMEDIATE 'DROP TABLE '||v_tablename;
        END IF;
      END LOOP;
    END;删除表TEST:
    call drop_table('TEST');
      

  6.   

    用匿名块的话:
    declarename varchar2(10);begin
    select table_name 
    into  name
    from user_tables
    where table_name=...;if name=null then...
    else...