Help com cursor

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Vitória
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qua, 24 Out 2007 2:28 pm
Localização: São Paulo/SP

Pessoal,

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.

Selecionar tudo

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;

Alguém pode me ajudar???

Obrigada.
Vivi'S
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

Olá Vitória,

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.

Selecionar tudo

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.

[]'s
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Vitória,
Tudo bem?

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ê:

Selecionar tudo

 SELECT num_rows 
	  FROM user_tables
	 WHERE table_name = 'T_NOME_TABELA';
Para saber de todas as tabelas, retire o Where acima.
Vitória
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qua, 24 Out 2007 2:28 pm
Localização: São Paulo/SP

Valeu gente...

Obrigada.

Vivi's
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 7 visitantes