create or replace procedure drop_table(name varchar2) is
  i number;
begin
  select count(*) into i from tab where tname=name;
  if i>0 then
    execute immediate 'drop table '||name;
  end if;
end;

解决方案 »

  1.   

    tab 和 user_tables 存的都有是什么东西呀,请教 CodeMagic(写错了吧) (
      

  2.   

    create or replace procedure drop_table(name varchar2) is
      i number;
    begin
      select count(*) into i from user_tables where table_name=name;
      if i>0 then
        execute immediate 'drop table '||name;
      end if;
    end;
      

  3.   

    用动态SQL, Execute immediate
      

  4.   

    create table log(log_msg varchar2(400),log_time date default sysdate);
    create or replace procedure drop_table(name in varchar2) is
       v_msg varchar2(200);
    begin
       select 1 from user_tables where table_name = upper(name);
       execute immediate 'drop table '||name;
       insert into log(log_msg) values(' table '||tname||' droped ');
       commit;
       exception 
         when no_data_found then
           insert into log(log_msg) values('table '||name||' does not exists ' );
           commit;
         when others then
           v_msg := sqlerrm;
           insert into log(log_msg) values('error raised : '||v_msg);
    end drop_table;
    /
      

  5.   

    select 1 into v_var from all_tables where owner='Your Users' and table_name=tablename
      

  6.   

    tab 和 user_tables都是oracle自带的,存储关于资料表的资料
      

  7.   

    不知道你是怎么写的,其实有个最简单的办法
    DECLARE
       X_1   NUMBER;
    BEGIN
       SELECT 1 INTO X_1  FROM TABLE_NAME;
       DROP TABLE TABLE_NAME;
    EXCEPTION
       WHEN OTHERS THEN
           IF SQLCODE = -942 THEN
               你的操作处理
           END IF;
      

  8.   

    user_tables是系统表,存的字段有表名,表空间等等的内容
      

  9.   

    --drop所有的表(确保你当前用户有这个权限):
    create or replace procedure drop_table is
    begin
          set echo off
          set feedback off
          spool c:sql.sql
          select 'drop table '||table_name';' from all_tables;
          spool off
          set feedback on
          set echo on
          start c:sql.sql
    end;
      

  10.   

    调用
    execute procedure_name;