Pular para o conteúdo
  • Este tópico contém 3 respostas, 2 vozes e foi atualizado pela última vez 10 anos, 4 meses atrás por Avatar de Fábio PradoFábio Prado.
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #106760
    Avatar de RoninRonin
    Participante

      Bom dia,

      Pessoal, estou tentando construir uma procedure que será chamada por uma aplicação C# para alimentar um grid, porém estou tendo problemas na execução, eu preciso passar um parametro de filial e retorno um campo chamado nível.

      Obrigado,

      CREATE OR REPLACE PROCEDURE sp_indicadorperdavenda(
      in_filial IN char,
      out_nivel1 out char)

      IS
      vout_nivel1 char ;

      BEGIN
      select distinct TG1.BCODGRUPOPROD1TGRP1 N1–,TG1.STRDESCRGRUPOPRODTGRP1 MERC1, TG2.BCODGRUPOPROD2TGRP2 N2, TG2.STRDESCRGRUPOPRODTGRP2 MERC2, TO_NUMBER(SUM(ZB5.ZB5_TOTCUS)) PERDACONHECIDA, TO_NUMBER(‘0’) PERDADESCONHECIDA, TO_NUMBER(‘0′) VENDA
      into vout_nivel1
      from siga.zb5010 zb5
      JOIN INFOMIL.tprodutostgrupos TG on tg.lcodinternoprodutotprdgrp = zb5.zb5_cod and tg.bcodestruturatprdgrp = 5
      join INFOMIL.tprodutosgrupo1 tg1 on tg1.BCODGRUPOPROD1TGRP1 = tg.BCODGRUPOPROD1TPRDGRP and tg1.BCODESTRUTURATGRP1 = 5
      join INFOMIL.tprodutosgrupo2 tg2 on tg2.BCODGRUPOPROD1TGRP2 = tg.BCODGRUPOPROD1TPRDGRP and tg2.BCODGRUPOPROD2TGRP2 = tg.BCODGRUPOPROD2TPRDGRP
      and tg1.BCODGRUPOPROD1TGRP1 = tg2.BCODGRUPOPROD1TGRP2 and tg2.BCODESTRUTURATGRP2 = 5
      where zb5_filial = in_filial and TO_CHAR(zb5_data,’YYYYMMDD’) >= ‘20140301’ and TO_CHAR(zb5_data,’YYYYMMDD’) <= '20140430'; end ; exec sp_indicadorperdavenda ('05'); após a execução da procedure, retorna as msgs abaxio rro ao iniciar na linha 79 no comando exec sp_indicadorperdavenda ('05') Relatório de erro: ORA-06550: linha 1, coluna 7: PLS-00306: wrong number or types of arguments in call to 'SP_INDICADORPERDAVENDA' ORA-06550: linha 1, coluna 7: PL/SQL: Statement ignored 06550. 00000 - "line %s, column %s:n%s" *Cause: Usually a PL/SQL compilation error. *Action:

      #106762
      Avatar de Fábio PradoFábio Prado
      Participante

        Ronin,

        A Procedure tem 2 parâmetros, 1 de entrada e 1 de saída. Na aplicação vc tem que chamá-la informado valores para todos os parâmetros e não somente para os parâmetros de entrada, como vc fez.

        Ao invés de:

        exec sp_indicadorperdavenda ('05');

        Faça algo parecido com:

        exec sp_indicadorperdavenda ('05', nome_variavel_da_aplicacao);

        []s

        #106763
        Avatar de RoninRonin
        Participante

          Olá fábio,

           Conforme código(plsql), ficariam assim então ?
          
            exec sp_indicadorperdavenda ('05',out_nivel1) 
          

          Para parametros de saída eu ñ preciso passar valor, correto ?

          ;Erro ao iniciar na linha 80 no comando
          exec sp_indicadorperdavenda (’05’,’out_nivel1′)
          Relatório de erro:
          ORA-06550: linha 1, coluna 36:
          PLS-00363: expression ‘out_nivel1’ cannot be used as an assignment target
          ORA-06550: linha 1, coluna 7:
          PL/SQL: Statement ignored
          06550. 00000 – “line %s, column %s:n%s”
          *Cause: Usually a PL/SQL compilation error.
          *Action:

          #106766
          Avatar de Fábio PradoFábio Prado
          Participante

            Ronin,

            Vc não pode passar valor para um parâmetro de saída. Vc tem que declarar uma variável na aplicação e passar ela na posição do parâmetro de saída. Maiores detalhes não vou conseguir te passar pq faz muito tempo que eu não programo em C#. Se vc tiver dúvidas de como escrever código para isso, sugiro que vc pegue ajuda em um fórum qq de programadores em C#, pois lá vc conseguirá ajuda mais fácil, ok?

            []s

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