用动态sql
declare
  c_sql varchar2(300);
  counter integer;
begin
  for i in 1..500 loop
    c_sql:='select count(*) from a'||i;
    execute immediate into counter;
  end loop;
end;

解决方案 »

  1.   

    学习:这样counter中的值是累加的吗?
      

  2.   

    declare
      c_sql varchar2(300);
      counter integer;
      sum integer;  
    begin
      for i in 1..500 loop
        c_sql:='select count(*) from a'||i;
        execute immediate into counter;
        sum:= sum+counter;
      end loop;
    end;
      

  3.   

    呵呵,蝎子犯了个错误
    sum是关键字,不能做变量
      

  4.   

    你的数据库表可以从系统表sys.all_all_talbles 取出想统计的表,然后象上面那样统计!
      

  5.   

    如果时oracle8i以下版本:--C_TABLE里存储你要统计的所有的表名
    v_cur_select := DBMS_SQL.OPEN_CURSOR;
    v_total := 0;
        FOR V_TABLE IN C_TABLE LOOP
            sql_stmt := 'SELECT COUNT(*) FROM  ' || V_TABLE.TABLE_NAME;
            DBMS_SQL.PARSE(v_cur_select,sql_stmt,DBMS_SQL.NATIVE);
            DBMS_SQL.DEFINE_COLUMN(v_cur_select,1,v_count);
            v_int := DBMS_SQL.EXECUTE(v_cur_select);
            IF DBMS_SQL.FETCH_ROWS(v_cur_select)=0 THEN
                EXIT;
            ELSE
                DBMS_SQL.COLUMN_VALUE(v_cur_select,1,v_count);
            END IF;        v_total := v_total + v_count;    END LOOP;
        DBMS_SQL.CLOSE_CURSOR(v_cur_select);
      

  6.   

    我在ORACLE中使用,该怎么做,还有:
    declare
      c_sql varchar2(300);
      counter integer;
      sum integer;  
    begin
      for i in 1..500 loop
        c_sql:='select count(*) from a'||i;
        execute immediate into counter;
        sum:= sum+counter;
      end loop;
    end;
    不是用在ORACLE中吧?
      

  7.   

    every one :
     I have a question :
     
    this package will be repeat call by client application  ,
    when it execute more than 1000  will taken  ORA-01000: maximum open cursors exceededthe following code 
    as :create package pk_test as 
      t_cur is ref cursor;
      function fn_GetResult return t_cur; 
    end pk_test;
    /
    create package body pk_test as
     function fn_GetResult return t_cur
     is 
       rs t_cur;
      sqlview varchar2(1000);
      rst t_cur ;
     begin
       sqlview := 'select * from table ';
       if   rst%isopen then 
          close;        --- this statement never execute 
       end if ;
         open rst for sqlview;   return rst;
      end fn_GetResult;end pk_test ;
    /why ?
      

  8.   

    我写的那段就是用在oracle中的阿
      

  9.   

    使用存储过程
    查询 Select  Table_name From all_tables Where table_name like 'A%' ;
    使用游标循环将数目类加。
    应该没问题。
    可是 我想问一下,你统计这个数的目的是??
      

  10.   

    我就是希望通过SQLPLUS来查询500个表的每天是否有记录数
     icesummit(icesummit)的方式我不会用
      

  11.   

    如果只是这样的话,那你这么写:
    select 'select count(*) from ' || table_name || ';' 
    from user_tables
    where table_name like 'A%';
    这样会生成500条查询的语句,存放导一个文件中,比如:count.sql
    然后在sqlplus下运行它就可以了。
      

  12.   

    select 'select count(*) from ' || table_name || ';' 
    from user_tables
    where table_name like 'A%';
    未选定行
      

  13.   

    对,最简单的办法是批处理的生成select count(*) from tname 然后spool到a.sql
    最后在sqlplus中@a
    也可以把结果spool到一个文件中.