2010-01-12 52 views
0

我需要删除一个表并创建一个新表。如果我删除表并且该表不存在,则出现错误如果我删除一个表并且该表不存在,我得到一个错误

如何检查表是否存在?

我正在使用Oracle 11g

在此先感谢。

+1

existing = exists – Hogan 2010-01-12 21:52:58

+1

获取错误不是世界的尽头 - 如果表不存在,您可以使用异常处理程序处理错误。 – 2010-01-13 06:30:50

+0

[Oracle:If Table Exists]的可能重复(http://stackoverflow.com/questions/1799128/oracle-if-table-exists) – 2012-06-27 04:44:10

回答

6

你可以做这样的事情:

DECLARE v_exist PLS_INTEGER; 
BEGIN 

SELECT COUNT(*) INTO v_exist 
FROM user_tables 
WHERE table_name = 'YOURTABLEHERE'; 

IF v_exist = 1 THEN 
    EXECUTE IMMEDIATE 'DROP TABLE YOURTABLEHERE'; 
END IF; 
1

select count(*) from user_tables 
where table_name= :table name 

select count(*) from dba_tables 
where owner = :table owner 
and table_name = :table name 

或严厉的选择:

begin execute immediate 'drop table table_name'; 
exception when others then null; 
end; 
1

我一直在使用以下步骤来照顾这:

create or replace procedure drop_table_if_exists (p_table_name varchar2) 
is 
    it_exist number; 
begin 
    select count(*) 
    into it_exists 
    from user_tables 
    where table_name = p_table_name 
    ; 
    if it_exists >= 1 then 
    execute immediate 'drop table '||p_table_name; 
    end if; 
end; 
/

exec drop_table_if_exists ('TABLE_TO_DROP'); 
4
DECLARE 
    eTABLE_OR_VIEW_DOES_NOT_EXIST EXCEPTION; 
    PRAGMA EXCEPTION_INIT(eTABLE_OR_VIEW_DOES_NOT_EXIST, -942); 
BEGIN 
    EXECUTE IMMEDIATE 'DROP TABLE SCHEMA.WHATEVER'; 
EXCEPTION 
    WHEN eTABLE_OR_VIEW_DOES_NOT_EXIST THEN 
    NULL; 
END; 

分享和享受。

相关问题