DBMS_OUTPUT.PUTLINE

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
Adimari
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Sex, 05 Set 2008 6:20 pm
Localização: São Paulo

Oi, to comecando a trabalhar com Oracle, e na minha procedure, o dbms aceita os parametros do select, porem quando ele faz um count(distinct) ele não aceita esse campo para imprimir, criei uma variavel e fiz select into var, mas mesmo assim não esta aceitando:
segue o script

Selecionar tudo

--Nesse ele aceita
FOR i IN (SELECT DISTINCT a.anomes   
            FROM tempvoltaimpj j, tempvoltaimpa a         
           WHERE j.indicea = a.indicea           
             AND substr(j.idsetor,1,2) = pidregiao           
             AND a.anomes = panomes)
LOOP
BEGIN
DBMS_OUTPUT.put_line('ANOMES = '|| i.anomes);  
END;
END LOOP;

COMMIT;

-- Mas aqui ele não aceita imprimir
FOR i IN (SELECT COUNT (DISTINCT (matricula)) INTO v1(i)          
            FROM tempvoltaimpj j, tempvoltaimpa a         
           WHERE j.indicea = a.indicea           
             AND substr(j.idsetor,1,2) = pidregiao           
             AND a.anomes = panomes) 
LOOP
BEGIN
DBMS_OUTPUT.put_line('LOCAL = '|| i.); 
END;
END LOOP;

COMMIT;

alguém pode me ajudar e dar uma dica de como faco:::
Abracos
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

o indice não pode ser acessado mesmo,

você pode fazer um contador e incrementa-lo manualmente,

-- Mas aqui ele não aceita imprimir

Selecionar tudo

Declare
  vCont number := 0;
begin
  FOR i IN (SELECT COUNT (DISTINCT (matricula)) INTO v1(i)
                  FROM tempvoltaimpj j, tempvoltaimpa a
                WHERE j.indicea = a.indicea
                    AND substr(j.idsetor,1,2) = pidregiao
                    AND a.anomes = panomes)  LOOP
    vCont := vCont + 1;
    DBMS_OUTPUT.put_line('LOCAL = '|| vCont);
  END LOOP; 
end;
Somente assim...
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Tem que colocar um Alias na expressão do select para poder referenciá-la no registro do cursor implícito:

Selecionar tudo

  FOR i IN (SELECT COUNT(DISTINCT(matricula)) cnt_dist_matr
              FROM tempvoltaimpj j, tempvoltaimpa a
             WHERE j.indicea = a.indicea
                   AND substr(j.idsetor, 1, 2) = pidregiao
                   AND a.anomes = panomes)
  LOOP
    BEGIN
      dbms_output.put_line('COUNT DISTINCT MATRICULA = ' || i.cnt_dist_matr);
    END;
  END LOOP;
Mas sem group by alguma coisa só vai retornar uma linha no loop, não faria muito sentido um cursor aqui.
Adimari
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Sex, 05 Set 2008 6:20 pm
Localização: São Paulo

então....

Mas a dificuldade esta no seguinte, ex.:
tenho uma regional com 3 localidades, portanto tenho que contar o numero de matriculas para cada localidade nesta regional, em seaparado, mas to fazendo e sai o numero de matriuclas da regional inteira, alguém tem alguma sugestao de como melhorar isso:::
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

É o que eu mencionei acima, precisaria de um GROUP BY.

Qual coluna é a coluna da região? pidregiao?

Selecionar tudo


  FOR i IN (SELECT pidregiao, COUNT(DISTINCT(matricula)) cnt_dist_matr
              FROM tempvoltaimpj j, tempvoltaimpa a
             WHERE j.indicea = a.indicea
                   AND substr(j.idsetor, 1, 2) = pidregiao
                   AND a.anomes = panomes
             GROUP BY pidregiao)
  LOOP
    BEGIN
      dbms_output.put_line('Matr. na regional ' || i.pidregiao || ': ' || i.cnt_dist_matr);
    END;
  END LOOP;
Responder
  • Informação