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;
展开
 我来答
ct2k01
2012-12-15 · TA获得超过1570个赞
知道小有建树答主
回答量:1653
采纳率:0%
帮助的人:1101万
展开全部
你不是已经drop table又重新创建了,有什么问题吗?
你的思路是对的,要创建前应该先判断,如果存在就删掉重建,不存在的话就直接创建。
只是,可以稍微简化一下代码,比如那两个select,不需要用execute immediate的方式。对于dml语句,可以直接执行,比如select count(*) into vCount from user_tables where table_name =vTname,而创建语句直接放到if判断里面,这样显得结构上更紧凑和逻辑性。
追问
关键就在这个查找表是否存在的问题上。我用下边的create创建的表根本没有在 user_tables 里面,也没有在ALL_OBJECTS里。。而实际上这个表已经创建了(select *是有数据的)。。。问题就是在哪查找到这个表呢,或者直接判断表是否存在。。
johnny_2099
2012-12-15 · 超过42用户采纳过TA的回答
知道小有建树答主
回答量:84
采纳率:0%
帮助的人:52.7万
展开全部
user_tables 中的 table_name作为字符处理,必须是大写的才能匹配,所以最好你应该加上upper函数
vSql :='select count(*) from user_tables where table_name = '''||upper(vTname)||''' ' ;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式