Duvida procedure

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
indeo
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 23
Registrado em: Qua, 18 Nov 2009 8:54 am
Localização: SC

aí galera preciso fazer uma procedure mais to levando um pau aqui
não sei se é possivel fazer uma procedure que realiza um select

Selecionar tudo

create or replace procedure P_SOMA_NOTA(P_DAT_INICIAL NOTA_FISCAL.DAT_EMISS%TYPE,
                                        P_DAT_FINAL   NOTA_FISCAL.DAT_EMISS%TYPE) is
begin
  select pr.nom_proje "NOME DO PROJETO", sum(nf.val_nf) TOTAL
    from proje pr, nota_fiscal nf
   where pr.sig_proje = nf.sig_proje
     AND dat_emiss between P_DAT_INICIAL and P_DAT_FINAL
   group by pr.nom_proje;
end P_SOMA_NOTA;
O programa diz que eu tenho que inserir into
quando coloco into
ele pede from [/code]
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

acho q você quer fazer um select e retornar o seu resultado ne ?!?

você tem q declarar seu parametro de saida

da uma olhada aqui
indeo
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 23
Registrado em: Qua, 18 Nov 2009 8:54 am
Localização: SC

mas se retornar algo dai já é uma função
eis a questão
acho que me passaram errado o exercicio ;/
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

olha uma apostila aqui
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Procedures podem retornar valores atraves de parametros do tipo out.

Apenas o código que tu tem ai esta meio sem sentido nenhum.

O que tu precisa fazer?
indeo
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 23
Registrado em: Qua, 18 Nov 2009 8:54 am
Localização: SC

3- Criar um procedimento que selecione o nome do projeto e a soma das notas emitidas para ele em um determinado período.

tenso porque o select da mais de uma valor
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Sendo este o exercicio o select me parece certo.
Qual o problema?
Posta o erro.
indeo
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 23
Registrado em: Qua, 18 Nov 2009 8:54 am
Localização: SC

não é bem o erro
criei um cursor e nele tem esse select
mas ele vai dar mais de uma linha
ou seja vou criar uma variavel do typo c_nome_cursor%rowtype
nele eu vo fazer o fetch do cursor
e vou jogar no dbms_output.putline dentro de um loop
para exibir todas as linhas
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Ok, o teu problema do into deve ser no fetch então

Selecionar tudo

fetch c_cursor INTO r_variavel;
e dae tu varre essa variavel dentro de um loop e exibe na tela.
indeo
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 23
Registrado em: Qua, 18 Nov 2009 8:54 am
Localização: SC

ficou assim

Selecionar tudo

create or replace procedure P_SOMA_NOTA(P_DAT_INICIAL NOTA_FISCAL.DAT_EMISS%TYPE,
                                        P_DAT_FINAL   NOTA_FISCAL.DAT_EMISS%TYPE) is
  CURSOR C_SOMA_NOTA IS
    select pr.nom_proje "NOME DO PROJETO", sum(nf.val_nf) TOTAL
      from proje pr, nota_fiscal nf
     where pr.sig_proje = nf.sig_proje
       AND dat_emiss between P_DAT_INICIAL and P_DAT_FINAL
     group by pr.nom_proje;

  W_SOMA_NOTA C_SOMA_NOTA%ROWTYPE;

begin
  OPEN C_SOMA_NOTA;
  LOOP
    FETCH C_SOMA_NOTA
      INTO W_SOMA_NOTA;
    EXIT WHEN C_SOMA_NOTA%NOTFOUND;
    DBMS_OUTPUT.put_line(W_SOMA_NOTA);

  
  END LOOP;

end P_SOMA_NOTA;
Deu um erro assim

Selecionar tudo

Compilation errors for PROCEDURE DADOS.P_SOMA_NOTA

Error: PLS-00306: número incorreto de tipos de argumentos na chamada para 'PUT_LINE'
Line: 18
Text: DBMS_OUTPUT.put_line(W_SOMA_NOTA);

Error: PL/SQL: Statement ignored
Line: 18
Text: DBMS_OUTPUT.put_line(W_SOMA_NOTA);
[/quote][/code]
indeo
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 23
Registrado em: Qua, 18 Nov 2009 8:54 am
Localização: SC

aí consegui
Era só ter orientado o que a variavel iria receber
Coloquei até uma quebra de linha
Primitivo mas consegui solucionar

Selecionar tudo

create or replace procedure P_SOMA_NOTA(P_DAT_INICIAL NOTA_FISCAL.DAT_EMISS%TYPE,
                                        P_DAT_FINAL   NOTA_FISCAL.DAT_EMISS%TYPE) is
  CURSOR C_SOMA_NOTA IS
    select pr.nom_proje PROJETO, sum(nf.val_nf) TOTAL
      from proje pr, nota_fiscal nf
     where pr.sig_proje = nf.sig_proje
       AND dat_emiss between P_DAT_INICIAL and P_DAT_FINAL
     group by pr.nom_proje;

  W_SOMA_NOTA C_SOMA_NOTA%ROWTYPE;

begin
  OPEN C_SOMA_NOTA;
  LOOP
    FETCH C_SOMA_NOTA
      INTO W_SOMA_NOTA;
    EXIT WHEN C_SOMA_NOTA%NOTFOUND;
    DBMS_OUTPUT.put_line('PROJETO: '|| W_SOMA_NOTA.PROJETO);
    DBMS_OUTPUT.put_line('TOTAL: '||W_SOMA_NOTA.TOTAL);
    DBMS_OUTPUT.PUT_LINE('-------------------------------------');
  END LOOP; 

end P_SOMA_NOTA;
[/code]
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

É o erro tava dando porque tu tava tentando imprimi na tela uma variavel com mais de um valor.
indeo
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 23
Registrado em: Qua, 18 Nov 2009 8:54 am
Localização: SC

Bem nessa nem tinha me ligado
Agora ta de boa, hj a tarde começa forms
Dai vo apanhar um monte
:-o :-o :-o :-o :-o :-o
Responder
  • Informação
  • Quem está online

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