怎么将查询结果作为表名继续使用?
时间:2011-11-29
来源:互联网
我写了一个存过,先是找数据库里的tmp开头的表,找到后判断一下这个表是否有记录,如果没有记录的话就drop掉。实现的过程如下:
create or replace procedure p_tmp_table is
type v_table_name_list is table of varchar2(32);
v_table_name v_table_name_list;
v_count integer;
begin
select table_name bulk collect into v_table_name from user_tables where table_name like 'TMP_%';
for i in v_table_name.first..v_table_name.last
loop
select count(*) into v_count from v_table_name;
if v_count = 0 then
EXECUTE IMMEDIATE 'drop table v_table_name';
dbms_output.put_line('table '||v_table_name||' has been droped!');
end if;
end loop;
end p_tmp_table;
但是这里select count(*) into v_count from v_table_name;有问题,提示说找不到表名v_table_name。大家有没有什么解决办法?
create or replace procedure p_tmp_table is
type v_table_name_list is table of varchar2(32);
v_table_name v_table_name_list;
v_count integer;
begin
select table_name bulk collect into v_table_name from user_tables where table_name like 'TMP_%';
for i in v_table_name.first..v_table_name.last
loop
select count(*) into v_count from v_table_name;
if v_count = 0 then
EXECUTE IMMEDIATE 'drop table v_table_name';
dbms_output.put_line('table '||v_table_name||' has been droped!');
end if;
end loop;
end p_tmp_table;
但是这里select count(*) into v_count from v_table_name;有问题,提示说找不到表名v_table_name。大家有没有什么解决办法?
作者: heqiyu34 发布时间: 2011-11-29
此处 v_table_name 并不是表、而是个collections
v_table_name.count
v_table_name.count
作者: lxpbs8851 发布时间: 2011-11-29
EXECUTE IMMEDIATE 'drop table v_table_name';改为
EXECUTE IMMEDIATE 'drop table '||v_table_name(i);
EXECUTE IMMEDIATE 'drop table '||v_table_name(i);
作者: youshang444 发布时间: 2011-11-29
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28