Eu tenho uma tabela que guarda o nome de todas as outras tabelas do banco. Eu preciso contar os registros de todas as tabelas.
A minha idéia foi criar um cursor e dando um select nessa tabela ter todos os nomes de tabelas.
Mas depois que os nomes das tabelas estão no cursor eu Não sei como "resgatar ou utilizar esse valores".
Segue abaixo o Código.
DECLARE
CURSOR TABLE_NAME1 IS
SELECT * FROM MAXTABLE;
REG_TABLENAME TABLE_NAME1%ROWTYPE;
BEGIN
OPEN TABLE_NAME1 ;
LOOP
FETCH TABLE_NAME1 INTO REG_TABLENAME;
EXIT WHEN TABLE_NAME1%NOTFOUND;
select count(reg_tablename.tablename)???
END LOOP;
CLOSE TABLE_NAME1;
END;
existe mais de uma forma de se fazer isso, uma delas é utilizando um select dinamico, mas como o select é pequeno preferi usar o execute immediate, segue abaixo o exemplo.
DECLARE
CURSOR TABLE_NAME2 IS
SELECT 'dual' TABLENAME
FROM dual;
REG_TABLENAME TABLE_NAME2%ROWTYPE;
v_QTDE NUMBER;
BEGIN
OPEN TABLE_NAME2 ;
LOOP
FETCH TABLE_NAME2 INTO REG_TABLENAME;
EXIT WHEN TABLE_NAME2%NOTFOUND;
EXECUTE IMMEDIATE 'SELECT COUNT(1) FROM '||reg_TABLENAME.TABLENAME INTO v_QTDE;
DBMS_OUTPUT.put_line('A tabela '||reg_TABLENAME.TABLENAME||' tem '||v_QTDE||' registros');
END LOOP;
CLOSE TABLE_NAME2;
END;
OBS: nesse teste eu modifiquei o cursor original, agora é só você substituir ele pelo seu select original.
Sobre "guardar as tabelas do banco", você poderia estar utilizando o próprio dicionário de dados do Oracle: a USER_TABLES (tabelas daquele SCHEMA) ou, ALL_TABLES, que guardam as tabelas do banco.
Para trazer todos os registros, o próprio dicionário disponibiliza pra você: