create or replace procedure TEST_PROCEDURES asv_tablename varchar2(2000);
v_count integer;
--从all_tables里面获取的所有表的表名称,保存在游标内
CURSOR mycursor is 
select t.table_name from all_tables t;
begin
  if mycursor%isopen = false then 
  open mycursor;
  end if;
  --获取游标的当前表名
  fetch mycursor into v_tablename;
  while mycursor%found
  loop
  --根据当前表名,获取表内的数据量
  select count(*) into v_count from v_tablename;
  --打印表名和数据量。
dbms_output.put_line(v_tablename||':'||v_count);
  fetch mycursor into v_tablename;
  end loop;  
end TEST_PROCEDURES;
存储过程如上,参考注释。错误信息:  select count(*) into v_count from v_tablename;这一行报如下错误
表或视图不存在。表名称不能用变量的原因?新手,刚学存储过程。

解决方案 »

  1.   


    select count(*) into v_count from v_tablename.table_name ;
      

  2.   

    不行的,v_tablename存的就是table_name字段的值。
    报同样的错误。
      

  3.   

    你这个用动态语句实现
    把这个
    select count(*) into v_count from v_tablename;
    换成这个
     str_sql := 'select count(*)  from '||v_tablename ;
    execute immediate str_sql into v_count ;
      

  4.   

    v_tablename
    是个记录集,不是表或视图……