Cursores

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
Soni
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Ter, 19 Dez 2006 2:51 pm
Localização: Palhoça - SC

Ola to com uma duvida no uso de cursor
tenho uma tabela piloto id_piloto, nome
uma tabela escala com id_voo, aviao, id_piloto

Preciso de um procedimento que utilize cursores que mostre para cada piloto os nomes dos seus aviões.

Assim retorna todos os pilotos e toda a lista de aviao para cada piloto, como coloco uma condição para filtrar os avioes de cada piloto

EX:
Paulo
A1
A2
A3

Joao
A4
A5
A1

Selecionar tudo

CREATE OR REPLACE PROCEDURE pr_cr5 IS

    av escala.aviao%type;
    id piloto.id_piloto%type;
    pi piloto.nome%type;
    
CURSOR CR1 IS

    SELECT piloto.id_piloto, piloto.nome 
    FROM piloto INNER JOIN escala
    ON piloto.id_piloto = escala.id_piloto
    GROUP BY piloto.id_piloto, piloto.nome;
    
CURSOR CR2 IS

    SELECT aviao FROM escala;
    
BEGIN
    OPEN CR1;
    LOOP
        FETCH CR1 INTO id, pi;
        EXIT WHEN CR1 %NOTFOUND;
        DBMS_OUTPUT.put_line(id||'   '||pi);
    
    
    OPEN CR2;
    LOOP
        FETCH CR2 INTO av;
        EXIT WHEN CR2 %NOTFOUND;
        DBMS_OUTPUT.put_line(av);
        
    END LOOP;
    CLOSE CR2;
    
    END LOOP;
    CLOSE CR2;
END;
/
-- EXECUTE pr_cr5;
erthal
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 130
Registrado em: Seg, 22 Nov 2004 1:45 pm
Localização: Niterói - RJ
Gustavo Erthal Jr. | TRISCAL
...................................................
Rio de Janeiro | (21) 2507-2010
São Paulo | (11) 3167-0526
www.triscal.com.br

Soni,

Ao final da proc, CLOSE CR1.
Soni
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Ter, 19 Dez 2006 2:51 pm
Localização: Palhoça - SC

erthal foi bobera dei close no CR2 duas vezes

o que eu queria é exibir o piloto e seus avioes e não to conseguindo pos não tem condição (where escala.id_piloto = id ) não sei como colocar.

obrigado pela atenção
Soni
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Ter, 19 Dez 2006 2:51 pm
Localização: Palhoça - SC

Consegui entender e resolver o problema obrigado pela força

Ficou assim:

Selecionar tudo

-- 5) Crie um procedimento que utilize cursores que mostre 
-- para cada piloto os nomes dos seus aviões.

CREATE OR REPLACE PROCEDURE pr_cr5 IS    
    id piloto.id_piloto%type;
    pi piloto.nome%type;
    av escala.aviao%type;
    
CURSOR CR1 IS

    SELECT piloto.id_piloto, piloto.nome 
    FROM piloto INNER JOIN escala
    ON piloto.id_piloto = escala.id_piloto
    GROUP BY piloto.id_piloto, piloto.nome;    
    
CURSOR CR2 IS

    SELECT aviao FROM escala 
    WHERE id_piloto = id
    GROUP BY aviao;

BEGIN
    OPEN CR1;
    LOOP
        FETCH CR1 INTO id, pi;
        EXIT WHEN CR1 %NOTFOUND;
        DBMS_OUTPUT.put_line('Piloto:  '||id||'   '||pi);     
        
        OPEN CR2;
        LOOP
            FETCH CR2 INTO av;
            EXIT WHEN CR2 %NOTFOUND;
            DBMS_OUTPUT.put_line('Avião: '||av);
    
    END LOOP;
    CLOSE CR2;
    DBMS_OUTPUT.put_line('---------------------------------');
    END LOOP;
    CLOSE CR1;
END;
/
-- EXECUTE pr_cr5;

saida:
---------------------------------
Piloto:  1016   Elino Rosa
AviÒo: Boing 737
---------------------------------
Piloto:  1001   JoÒo da silva
AviÒo: Mirrage
---------------------------------
Piloto:  1019   Anonimo
AviÒo: Mirrage
---------------------------------
Piloto:  1004   Andrews Smith
AviÒo: Mirrage
---------------------------------
Piloto:  1002   Jhon Smith Jr
AviÒo: Mirrage
---------------------------------
Piloto:  1000   JosÚ  Manoel
AviÒo: Mirrage
AviÒo: MD11
---------------------------------

:-o
Responder
  • Informação
  • Quem está online

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