oracle数据库判断表(由存储过程创建)的存在
我分别查了user_tables表和ALL_OBJECTS表,都没有我建的表。那我每次还需要判断一下。。请问怎么办?vSql:='selectcount(*)fromus...
我分别查了user_tables表和ALL_OBJECTS表,都没有我建的表。那我每次还需要判断一下。。请问怎么办?
vSql :='select count(*) from user_tables where table_name = '''||vTname||''' ' ;
EXECUTE IMMEDIATE vSQL into vCount1;
if( vCount1>0) then
vSql :='drop table '||vTname||' ';
EXECUTE IMMEDIATE vSQL;
commit;
end if;
vSql :='select count(*) from user_tables where table_name = '''||vTnameEx||''' ' ;
EXECUTE IMMEDIATE vSQL into vCount2;
if( vCount2>0) then
vSql :='drop table '||vTnameEx||' ' ;
EXECUTE IMMEDIATE vSQL;
commit;
end if;
vSql :='create table '||vTname||' (dwbh varchar(100),dwmc varchar(200),flag number(1),dwlx number) ';
EXECUTE IMMEDIATE vSQL;
commit;
vSql :='create table '||vTnameEx||' (dwbh varchar(100),dwlx number)';
EXECUTE IMMEDIATE vSQL;
commit; 展开
vSql :='select count(*) from user_tables where table_name = '''||vTname||''' ' ;
EXECUTE IMMEDIATE vSQL into vCount1;
if( vCount1>0) then
vSql :='drop table '||vTname||' ';
EXECUTE IMMEDIATE vSQL;
commit;
end if;
vSql :='select count(*) from user_tables where table_name = '''||vTnameEx||''' ' ;
EXECUTE IMMEDIATE vSQL into vCount2;
if( vCount2>0) then
vSql :='drop table '||vTnameEx||' ' ;
EXECUTE IMMEDIATE vSQL;
commit;
end if;
vSql :='create table '||vTname||' (dwbh varchar(100),dwmc varchar(200),flag number(1),dwlx number) ';
EXECUTE IMMEDIATE vSQL;
commit;
vSql :='create table '||vTnameEx||' (dwbh varchar(100),dwlx number)';
EXECUTE IMMEDIATE vSQL;
commit; 展开
2个回答
展开全部
你不是已经drop table又重新创建了,有什么问题吗?
你的思路是对的,要创建前应该先判断,如果存在就删掉重建,不存在的话就直接创建。
只是,可以稍微简化一下代码,比如那两个select,不需要用execute immediate的方式。对于dml语句,可以直接执行,比如select count(*) into vCount from user_tables where table_name =vTname,而创建语句直接放到if判断里面,这样显得结构上更紧凑和逻辑性。
你的思路是对的,要创建前应该先判断,如果存在就删掉重建,不存在的话就直接创建。
只是,可以稍微简化一下代码,比如那两个select,不需要用execute immediate的方式。对于dml语句,可以直接执行,比如select count(*) into vCount from user_tables where table_name =vTname,而创建语句直接放到if判断里面,这样显得结构上更紧凑和逻辑性。
追问
关键就在这个查找表是否存在的问题上。我用下边的create创建的表根本没有在 user_tables 里面,也没有在ALL_OBJECTS里。。而实际上这个表已经创建了(select *是有数据的)。。。问题就是在哪查找到这个表呢,或者直接判断表是否存在。。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询