oracle中判断表是否存在
--在以下视图中存放着表的信息。
--DBA_TABLES,tab,cat,user_tables可能还有其他我不知道的视图。条件中的值是区分大小写的。
select * from DBA_TABLES where owner='LC00019999' and table_name='FANG'
select * from user_tables where table_name='FANG';
--DBA_TABLES,user_tables这两个视图显示的信息最全,因为字段很多就不在此显示了
select * from tab where tname='FANG';
/*
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------------------
FANG TABLE
1 rows selected
*/
select * from cat where table_name='FANG';
/*
TABLE_NAME TABLE_TYPE
------------------------------ -----------
FANG TABLE
1 rows selected
*/
--这两个视图显示的信息就有点少了。
--不管多少信息都可以根据这些信息判断是否存在表,然后作相应的操作。
--下面的匿名块就是创建表的脚本。
--显示dbms_output.put_line的输出结果。
set serveroutput on
--声明变量,存储系统中存在表的个数。
declare
shuliang INTEGER :=0;
begin
--从DBA_TABLES查询所有者是LC00019999的,是否存在FANG表。将数值放入到变量shuliang。
select count(*) into shuliang FROM DBA_TABLES where owner='LC00019999' and table_name='FANG';
--如果数量是0,系统中不存在此表,那么创建表,并输出创建成功。
if shuliang=0 then
execute immediate 'create table fang (id varchar(20))';
dbms_output.put_line('cuang jian cheng gong');
--可以删除表,或者清除数据,插入数据,等等操作
--再此只是显示一下,此表已经存在。
else
dbms_output.put_line('ci baio cun zai');
end if;
end;