+ -
当前位置:首页 → 问答吧 → 怎么将查询结果作为表名继续使用?

怎么将查询结果作为表名继续使用?

时间: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。大家有没有什么解决办法?

作者: heqiyu34   发布时间: 2011-11-29

此处 v_table_name 并不是表、而是个collections
v_table_name.count

作者: lxpbs8851   发布时间: 2011-11-29

EXECUTE IMMEDIATE 'drop table v_table_name';改为
EXECUTE IMMEDIATE 'drop table '||v_table_name(i);

作者: youshang444   发布时间: 2011-11-29