Pular para o conteúdo
Visualizando 9 posts - 1 até 9 (de 9 do total)
  • Autor
    Posts
  • #87013
    Avatar de priscilaapriscilaa
    Participante

      Preicso fazer o seguinte:

      04- Faça uma procedure que contenha um cursor. O programa deve mostrar na tela o resultado dos seguintes problemas

      a. Encontre os empregados que mais que a média de salários da companhia
      b. Encontre a companhia que tenha a menor folha de pagamento e a que tenha a maior folha pagamento

      Não faço ideia de como fazer isso..é um exercicio da faculdade..se fosse pra fazer o sql apenas do A e B eu saberia..mas procedure com cursor nao sei como fazer..

      Me ajudem

      #87014
      Avatar de IshiiIshii
      Participante

        Olá,

        Vou te passar mais ou menos a estrutura e os SQLs você coloca ai….

        create or replace procedure sp_priscila as

        -- Cursor 1

        cursor c1 is

        ;

        -- Cursor 2

        cursor c2 is

        ;

        begin

        -- Abrindo o cursor 1

        for r1 in c1 loop
        --
        -- Colocando o resultado em tela
        --
        dbms_output.put_line ('Resultado cursor 1:' || r1.);
        --

        end loop;

        -- Abrindo cursor 2

        for r2 in c2 loop
        --
        -- Colocando o resultado em tela
        --
        dbms_output.put_line ('Resultado cursor 2:' || r2.);
        --

        end loop;

        end;

        Boa sorte,

        []s Ishii

        #87016
        Avatar de priscilaapriscilaa
        Participante

          eu tou fazendo no oracle..vai funcionar?

          #87017
          Avatar de priscilaapriscilaa
          Participante

            é não deu certo..

            a consulta do A é a seguinte

            select nome_empregado, nome_companhia from trabalha t
            where t.salario > (select AVG (t2.salario) from trabalha t2
            where t2.nome_companhia = t.nome_companhia)

            e a do B:

            select t.nome_companhia,sum(salario)from trabalha t group by t.nome_companhia
            having sum(salario) = (select min(sum(salario)) from trabalha group by nome_companhia)
            union
            select t.nome_companhia, sum(salario) from trabalha t group by t.nome_companhia
            having sum(salario) = (select max(sum(salario)) from trabalha group by nome_companhia)

            #87022
            Avatar de IshiiIshii
            Participante

              Olá,

              Vamos lá…

              create or replace procedure sp_priscila as

              -- Cursor 1

              cursor c1 is
              select nome_empregado, nome_companhia from trabalha t
              where t.salario > (select AVG (t2.salario) from trabalha t2

              where t2.nome_companhia = t.nome_companhia) ;;

              -- Cursor 2

              cursor c2 is
              select t.nome_companhia,sum(salario) salario from trabalha t group by t.nome_companhia
              having sum(salario) = (select min(sum(salario)) from trabalha group by nome_companhia)
              union
              select t.nome_companhia, sum(salario) salario from trabalha t group by t.nome_companhia

              having sum(salario) = (select max(sum(salario)) from trabalha group by nome_companhia);

              begin

              -- Abrindo o cursor 1

              for r1 in c1 loop
              --
              -- Colocando o resultado em tela
              --
              dbms_output.put_line ('Resultado cursor 1:' || r1.nome_empregado);
              --

              end loop;

              -- Abrindo cursor 2

              for r2 in c2 loop
              --
              -- Colocando o resultado em tela
              --
              dbms_output.put_line ('Resultado cursor 2:' || r2.nome_companhia);
              --

              end loop;

              end;

              Para executar isso no SQL*Plus


              SQL>SET SERVEROUTPUT ON size 1000000
              SQL>exec sp_priscila ;

              Veja se isso funciona….

              []s Ishii

              #87023
              Avatar de priscilaapriscilaa
              Participante

                Funcionou…

                mas…

                Abrindo o cursor 1

                for r1 in c1 loop

                Colocando o resultado em tela

                dbms_output.put_line ('Resultado cursor 1:' || r1.nome_empregado); 
                  end loop; 
                

                Não entendi muito essa parte do for r1 in c1 loop…oq é isso?

                Não se usa open, e fetch?

                No caso eu nao tou usando o sql plus tou usando o oracle 10g express…na parte de designer pra digitaro sql..como consigo ver o resultado da procedure dessa forma?

                #87025
                Avatar de IshiiIshii
                Participante

                  Olá,

                  Na verdade há alguns tipos de Cursors no Oracle e esse é um deles. Você poderia usar o open-fetch também.

                  No caso o r1 seria um rowtype que seria alimentado pelo c1 (cursor mesmo) e caso não retorne linha mais no cursor ele sai automaticamente do loop.

                  []s Ishii

                  #87026
                  Avatar de priscilaapriscilaa
                  Participante

                    e como eu faria com open e fetch?

                    sei que tou abusando..mas como faria?

                    e como eu executo sem ser no sqlplus?

                    #87072
                    Avatar de DtabosaDtabosa
                    Participante

                      Alguém poderia me ajudar na seguinte dúvida? Existe alguma forma de dar um retorno em uma trigger, tipo, eu gero uma chave primária sem o utilizar sequence, porém , a aplicação precisa do retorno do código da mesma forma que eu teria caso utilizasse a sequence(currval), ou seja, como eu poderia dar um return :new.chave ?

                      Ps.: Estou usando o orcale 9i e a aplicação usa java como linguagem.

                      Agradeço a ajuda

                    Visualizando 9 posts - 1 até 9 (de 9 do total)
                    • Você deve fazer login para responder a este tópico.
                    plugins premium WordPress