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;这一行报如下错误
表或视图不存在。表名称不能用变量的原因?新手,刚学存储过程。
select count(*) into v_count from v_tablename.table_name ;
报同样的错误。
把这个
select count(*) into v_count from v_tablename;
换成这个
str_sql := 'select count(*) from '||v_tablename ;
execute immediate str_sql into v_count ;
是个记录集,不是表或视图……