- Este tópico contém 8 respostas, 3 vozes e foi atualizado pela última vez 15 anos, 7 meses atrás por Dtabosa.
-
AutorPosts
-
27 de maio de 2009 às 10:32 pm #87013priscilaaParticipante
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 pagamentoNã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
27 de maio de 2009 às 10:55 pm #87014IshiiParticipanteOlá,
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
27 de maio de 2009 às 11:04 pm #87016priscilaaParticipanteeu tou fazendo no oracle..vai funcionar?
27 de maio de 2009 às 11:10 pm #87017priscilaaParticipanteé 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)28 de maio de 2009 às 12:08 am #87022IshiiParticipanteOlá,
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 t2where 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_companhiahaving 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
28 de maio de 2009 às 12:19 am #87023priscilaaParticipanteFuncionou…
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?
28 de maio de 2009 às 12:31 am #87025IshiiParticipanteOlá,
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
28 de maio de 2009 às 12:32 am #87026priscilaaParticipantee como eu faria com open e fetch?
sei que tou abusando..mas como faria?
e como eu executo sem ser no sqlplus?
1 de junho de 2009 às 5:23 pm #87072DtabosaParticipanteAlgué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
-
AutorPosts
- Você deve fazer login para responder a este tópico.