Count com parametro...

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
clebermano
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Qua, 31 Mar 2010 5:49 pm
Localização: Ribeirao preto - SP
Nunca se de por vencido.

Boa tarde pessoal,
Venho mais uma vez recorrer ao pessoal aqui do fórum para mais esse dilema.
Preciso colocar a quantidade de registros da tabela que vem do parametro no output.
Mas já tentei de tudo dá erro de sintaxe.
alguém poderia me ajudar ?
Agradeço desde já.

Declare
VTotalReg integer := 0;
begin
for i in (select a.tabela from mon_paramtabela a where a.statustabela = 'A')
loop

*/ esta linha abaixo que dá erro.
execute immediate ' select count(*) into VTotalReg from ' || i.tabela;

Dbms_Output.put_line('Tabela : ' || i.tabela || VTotalREg );
end loop;
end;
dudu0566
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 74
Registrado em: Seg, 06 Ago 2007 3:59 pm
Localização: Campinas - SP
Eduardo Gomes

Tenta assim:

Selecionar tudo

execute immediate ' select count(*) from ' || i.tabela into VTotalReg; 
tom
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 29
Registrado em: Dom, 11 Jul 2004 8:45 pm
Localização: Guarulhos - SP

clebermano
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Qua, 31 Mar 2010 5:49 pm
Localização: Ribeirao preto - SP
Nunca se de por vencido.

Bom dia pessoal, agradeço as dicas mas ainda não funcionou.
Peguei os exemplos la do link e nada.
O que percebi é o seguinte:
Se eu executro o sql immediate assim :
execute immediate 'select * from ' || i.tabela;
daí dá certo, mas não me antende pois eu preciso do total de registros que está na tabela, eu percebi que o problema acontece quando eu executo o count -> Into, pois aí recebo a mensagem que a tabela não existe.
Alguma outra luz?
Obrigado por enquanto..
dudu0566
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 74
Registrado em: Seg, 06 Ago 2007 3:59 pm
Localização: Campinas - SP
Eduardo Gomes

no link que o Tom mandou tem bastante coisa interessante que pode te ajudar.
Por exemplo:

Selecionar tudo

Example 7-8 Accessing %ROWCOUNT For an Explicit Cursor

DECLARE
  TYPE cursor_ref IS REF CURSOR;
  c1 cursor_ref;
  TYPE emp_tab IS TABLE OF employees%ROWTYPE;
  rec_tab emp_tab;
  rows_fetched NUMBER;
BEGIN
  OPEN c1 FOR 'SELECT * FROM employees';
  FETCH c1 BULK COLLECT INTO rec_tab;
  rows_fetched := c1%ROWCOUNT;
  DBMS_OUTPUT.PUT_LINE('Number of employees fetched: ' || TO_CHAR(rows_fetched));
END;
Ou

Selecionar tudo

CREATE FUNCTION row_count (tab_name VARCHAR2) RETURN NUMBER AS
   rows NUMBER;
BEGIN
   EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || tab_name INTO rows;
   RETURN rows;
END;
/
-- From an anonymous block, you might call the function remotely, as follows:
DECLARE
   emp_count INTEGER;
BEGIN
   emp_count := row_count@hr_db('employees');
   DBMS_OUTPUT.PUT_LINE(emp_count);
END;
Está mais pro final da página!!!
beleza?

Valeu Tom!!!
Responder
  • Informação
  • Quem está online

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