Ajuda com um exercicio

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
Marcus Vinícius Sanchez
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 20 Ago 2008 5:06 pm
Localização: Tupã/SP
" Sigo sempre em Deus ! "

Olá pessoal, estou em um treinamento oracle e não estou conseguindo resolver esse exercicio..
alguém poderia me ajudar?
obrigado..Marcus.



Fazer uma procedure para ler o número e nome dos departamentos. Para cada depto lido, chamar outra procedure para ler o número, nome, salário e cargo dos funcionários.
OBS: Quando o departamento não possuir funcionário mostrar mensagem.
Ex: 10 vendas
1 jose 1.000,00 vendedor
2 maria 1.200,00 vendedor
20 analista
3 sandro 3.400,00 analista
4 pedro 4.000,00 analista
30 compras
Esse depto não possui empregados
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Por várias razões eu tenho quase certeza que esse tópico nunca receberá uma resposta:

1. Não sabemos as tabelas. É do SCOTT ? (não foi citado).
2. É um treinamento curso que você está fazendo. Não faz sentido alguém daqui fazer o exercício pra você, pois o objetivo do seu curso não será alcançado (que é você aprender)
3. Provavelmente tem algum professor aí que está sendo PAGO pra ensinar essas coisas.

Desculpe dizer isso, mas o povo daqui está na maior correria... Já é difícil a gente conseguir dar uma mão pra quem está numa situação de vida ou morte no trabalho... Mais difícil ainda é fazer exercicios...

Agora, se você fizer uma pergunta específica assim:
"Tenho uma tabela X, e preciso fazer uma consulta Y, usando os campos Z. Tentei da seguinte forma .... mas não consegui! Alguém aí tem alguma idéia?"

Aí sim, provavelmente você terá muitas respostas! Reformule sua pergunta que o povo daqui gosta de ajudar!!! Mas como está acima, acho que não vai rolar :-S

:-o
Editado pela última vez por dr_gori em Sex, 17 Out 2008 4:50 pm, em um total de 1 vez.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Blezera brothers?!!

Creio que deva estar utilizando a emp e a dept do scott mesmo velho...
Mas, (concordo com o Dr_Gori que ) o lance é correr atrás e postar a dúvida, e, se a gente puder ajudar, ai sim entramos na conversa...
Mesmo porquê, quando este curso lhe propiciar um emprego, não teremos como ajudá-lo na tua tabela X ou Y, mas sim, direcioná-lo para algumas situações que porventura já passamos.
Qualquer coisa, manda pra gente.
Marcus Vinícius Sanchez
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 20 Ago 2008 5:06 pm
Localização: Tupã/SP
" Sigo sempre em Deus ! "

olá pessoal.
desculpem o encomodo.
Abraços.
edson.amorim
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 135
Registrado em: Qui, 04 Out 2007 3:36 pm
Localização: Belo Horizonte - MG

Prezado Marcus Vinícius,

E então, conseguiu resolver?Qualquer coisa, manda aí, estamos aqui para lhe ajudar!! ainda mais, com as com as dicas preciosas de nossos colegas acima!!

Um abraço,

Edson
Marcus Vinícius Sanchez
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 20 Ago 2008 5:06 pm
Localização: Tupã/SP
" Sigo sempre em Deus ! "

Então Amigos, não consegui resolver. é a as tabelas emp e dept do scott...eu fiz uma coisa assim ....
mas como ainda estou iniciando...está dificil...

Selecionar tudo

CREATE OR REPLACE PROCEDURE P_EXER6 IS
	CURSOR CUR_X IS
		SELECT DEPTNO, DNAME FROM DEPT;
		BEGIN
	FOR X IN CUR_X LOOP
DBMS_OUTPUT.PUT_LINE( X.DEPTNO || ‘   ‘ || X.DNAME || ‘    ‘ || VA_PRO);
END LOOP;
END;

CREATE OR REPLACE PROCEDURE P_EXERCICIO IS
	CURSOR CUR_Y IS
SELECT EMPNO, ENAME, SAL, JOB FROM EMP;
	BEGIN
	FOR Y IN CUR_Y   LOOP
		DBMS_OUTPUT.PUT_LINE(Y.EMPNO || ‘  ‘ || Y.ENAME || ‘  ‘ || Y.SAL || ‘   ‘ 
|| Y.JOB); 
END LOOP;
END;

obrigado da ajuda, abraço.
Hahu
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 147
Registrado em: Qui, 16 Mar 2006 11:26 am
Localização: São Paulo
O mundo gira muito!!

Caro Marcus Vinícius Sanchez,

assim, você tem este exercício mencionado abaixo, certo?

em qual ponto do exercício, você está sentindo dificuldade?

é na montagem do select´s, nas procedures, nas chamadas de procedures ou na mensagem?

todos aqui do forum fazem o melhor que podem, mas, precisamos saber qual é a dúvida que você tem, para poder te ajudar e ter uma resposta a altura...entendeu :roll:

observamos, que você montou duas procedures, o que será que está faltando?

Abs Hahu. :wink:

Deus abençõe a Todos!
Marcus Vinícius Sanchez
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 20 Ago 2008 5:06 pm
Localização: Tupã/SP
" Sigo sempre em Deus ! "

Olá Hahu.
estou com dificuldade para chamar uma procedure dentro de outra..

""Fazer uma procedure para ler o número e nome dos departamentos. Para cada depto lido, chamar outra procedure para ler o número, nome, salário e cargo dos funcionários."""

criei as procedures..mas não estou conseguindo chamar..
obrigado amigos..Abraço a todos.
Hahu
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 147
Registrado em: Qui, 16 Mar 2006 11:26 am
Localização: São Paulo
O mundo gira muito!!

Caro Marcus Vinícius Sanchez,

então...está é uma solução...rs

Selecionar tudo


CREATE OR REPLACE PROCEDURE P_EXER6 IS
CURSOR CUR_X IS
SELECT DEPTNO, DNAME FROM DEPT;
BEGIN
FOR X IN CUR_X LOOP
DBMS_OUTPUT.PUT_LINE( X.DEPTNO || ‘ ‘ || X.DNAME || ‘ ‘ || VA_PRO);
END LOOP;
END;

CREATE OR REPLACE PROCEDURE P_EXERCICIO IS
CURSOR CUR_Y IS
SELECT EMPNO, ENAME, SAL, JOB FROM EMP;
BEGIN
FOR Y IN CUR_Y LOOP
DBMS_OUTPUT.PUT_LINE(Y.EMPNO || ‘ ‘ || Y.ENAME || ‘ ‘ || Y.SAL || ‘ ‘
|| Y.JOB);
END LOOP;
--- Aqui você chama a p_exer6 , só que você tem que rodar primeira a p_exer6
P_EXER6;
--
END; 


..após você criar as duas procedures no sqlplus..como sugestão, você pode fazer assim:

salve este script no bloco de notas como chama_proc.sql...o codigo abaixo!

Selecionar tudo


declare

begin
   
  P_EXERCICIO;

end;

daee você executa no sqlplus: exec chama_proc;

Veja, o que acontece e posta aqui no forum.. :)

abs Hahu :wink:
Marcus Vinícius Sanchez
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 20 Ago 2008 5:06 pm
Localização: Tupã/SP
" Sigo sempre em Deus ! "

OBRIGADO DA ATENÇÃO GALERA, DEU PARA ENTEDER !!
ABRAÇOS.
edson.amorim
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 135
Registrado em: Qui, 04 Out 2007 3:36 pm
Localização: Belo Horizonte - MG

Caros colegas,

Primeiro: tentei reproduzir a situação de nosso colega mas está dando um erro no campo "VA_PRO, fala que ele tem que ser declarado.

Então, a gente cria uma a uma das procedures, ok? Depois cria uma outra procedure com este ultimo código e manda executar?
gostaria de entender junto com ele este código!!

Obrigado,
Marcus Vinícius Sanchez
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 20 Ago 2008 5:06 pm
Localização: Tupã/SP
" Sigo sempre em Deus ! "

Caro Edson,



essa va_pro não existe, eu tinha colocado ela..porque tinha pensado que iria usa-lá


abraços, Marcus.
edson.amorim
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 135
Registrado em: Qui, 04 Out 2007 3:36 pm
Localização: Belo Horizonte - MG

Marcus Vinicius,

òtimo!! então, consegui compilar as 2 procedures, ok!! Quando eu utilizo no SQL PLUS o comando:

Exec P_Exercicio e Exec P_Exer6, recebo o retorno ok das 2 procedures, mas e daí? como é que você verá os resultados? Veja o que eu fiz:

Selecionar tudo



SQL*Plus: Release 9.0.1.0.1 - Production on Dom Out 19 20:49:11 2008

(c) Copyright 2001 Oracle Corporation.  All rights reserved.


Conectado a:
Personal Oracle9i Release 9.0.1.1.1 - Production
With the Partitioning option
JServer Release 9.0.1.1.1 - Production

SQL> exec P_Exercicio;

Procedimento PL/SQL concluído com sucesso.

SQL> exec P_Exer6;

Procedimento PL/SQL concluído com sucesso.

SQL> 
Então, é por aí?

Edson
Marcus Vinícius Sanchez
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 20 Ago 2008 5:06 pm
Localização: Tupã/SP
" Sigo sempre em Deus ! "

Então ...
olha como sai...

Selecionar tudo

7369   SMITH  1464,1    CLERK
7499   ALLEN  1760    SALESMAN
7521   WARD  1375    SALESMAN
7566   JONES  5270,4    MANAGER
7654   MARTIN  1375    SALESMAN
7698   BLAKE  3135    MANAGER
7782   CLARK  2964,5    MANAGER
7788   SCOTT  6200,47    ANALYST
7839   KING  6050    PRESIDENT
7844   TURNER  1650    SALESMAN
7876   ADAMS  1948,72    CLERK
7900   JAMES  1045    CLERK
7902   FORD  5314,68    ANALYST
7934   MILLER  1573    CLERK
19   MARCUS  800    ANALISTA
1   JOSE  1210    ANALISTA
10   ACCOUNTING
20   RESEARCH
30   SALES
40   OPERATIONS



gostaria q saisse por departamento...exemplo...

Selecionar tudo

10	vendas
  	1	jose		1.000,00	vendedor
	2	maria		1.200,00	vendedor
	20	analista
	3	sandro	3.400,00	analista
	4	pedro		4.000,00	analista
	30	compras	
	Esse depto não possui empregados
abraços
edson.amorim
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 135
Registrado em: Qui, 04 Out 2007 3:36 pm
Localização: Belo Horizonte - MG

Caro Marcus Vinícius,

Como é que você faz para ver os dados? após executar as procedures através do SQLPLUS o que é que tenho que fazer para ver a relação dos dados conforme você informou acima? É através de algum relatório? En fim se puder dar a dica, ficarei muito grato,

Edson
edson.amorim
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 135
Registrado em: Qui, 04 Out 2007 3:36 pm
Localização: Belo Horizonte - MG

Olá Marcus,

E então, é possível você mostrar aqui como é que se faz então para ver os dados conforme você disse acima? Gostaria de saber o arroz com feijão mesmo, ou seja a maneira mais simples e explicar como é que se fazer isso!! Obrigado,
Marcus Vinícius Sanchez
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 20 Ago 2008 5:06 pm
Localização: Tupã/SP
" Sigo sempre em Deus ! "

faz os exec`s das procedures..

meu professor apresentou para mim a resposta..

Selecionar tudo

create or replace procedure p_func(pa_depto in number) is
   cursor cur_func is
      select empno, ename, sal, job
        from emp
       where deptno = pa_depto
       order by 1;
   va_tot   number(10) := 0;
begin
   for x in cur_func loop
      dbms_output.put_line(x.empno||' '||x.ename||' '||x.sal||' '||x.job);
      va_tot := va_tot + 1;
   end loop;
   if va_tot = 0 then
      dbms_output.put_line('Esse depto não possui empregados');
   end if;
end;
/

Selecionar tudo

create or replace procedure p_depto is
   cursor cur_depto is
      select deptno, dname
        from dept
       order by 1;
begin
   for x in cur_depto loop
      dbms_output.put_line(x.deptno||' '||x.dname);
      p_func(x.deptno);
   end loop;
end;
/

Selecionar tudo

exec p_depto


faz assim edson para você ver no sql*plus
abraços
edson.amorim
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 135
Registrado em: Qui, 04 Out 2007 3:36 pm
Localização: Belo Horizonte - MG

Olá Marcus,


Caramba, acredito que estou fazendo tudo certo mas não gera a lista. Só é informado que foi executado com sucesso. O que é que pode estar faltando?

Grato, Edson
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Edson, está rodando no SQL*Plus?
Antes de executar a procedure, execute o seguinte comando:

Selecionar tudo

SET SERVEROUTPUT ON;
Qualquer coisa, manda pra gente.
edson.amorim
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 135
Registrado em: Qui, 04 Out 2007 3:36 pm
Localização: Belo Horizonte - MG

Prezado Trevissoli,

Era este, o detlhe... Consegui, deu tudo certo após executar o ódigo que você informou.

Mais uma vez, meus agradeciemntos...

Edson
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Blzera velho...q bom q deu certo aí.
Precisando, conta com a gente.
Responder
  • Informação