none
Como chamar uma procedure a cada linha de outra procedure? RRS feed

  • Pergunta

  • Bom dia!

    Tenho duas procedures, a primeira é a principal, a segunda, precisa ser executada a cada linha da procedure principal,

    ou seja,

    os valores da primeira devem ser passados para a segunda e retornar um campo, para cada linha.

    Como fazer isso???

    Obrigado pessoal.

    Marcelo.

    quarta-feira, 23 de outubro de 2013 13:45

Respostas

  • Marcelo,

          Você pode fazer isso utilizando um CURSOR ou o WHILE, sempre armazenando os parâmetros na procedure principal em variáveis, como for necessário, para executar a segunda procedure em um "loop". Abaixo segue uma idéia de como você pode montar esta solução utilizando WHILE.

    CREATE PROC P_EXEMPLO
    AS
    DECLARE @VALOR           VARCHAR(10)
    DECLARE @POS             INT
    DECLARE @DELIMITADOR     CHAR(1)
    DECLARE @VALORES         VARCHAR(40)
    
    SET @VALORES ='12345,67890,321,654,987'
    SET @DELIMITADOR = ','
    
    SET @VALORES = @VALORES + @DELIMITADOR
    
    SET @POS = CHARINDEX(@DELIMITADOR, @VALORES)
    WHILE (@POS <> 0)
      BEGIN
         SET @VALOR = SUBSTRING(@VALORES, 1, @POS - 1)
         
         EXEC (PROC P_EXEMPLO2 @VALOR)
    
    
         SET @VALORES = SUBSTRING(@VALORES,@POS + 1,LEN(@VALORES))
         SET @POS = CHARINDEX(@DELIMITADOR, @VALORES)
      END 
    GO


    Espero que seja útil para você.

    Abraços,

    Durval Ramos
     Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    quarta-feira, 23 de outubro de 2013 23:43
    Moderador
  • Marcelo,

    Você destacou que os valores da primeira tem que ser passado para segunda!!!

    Neste caso minha sugestão é que você armazene os resultados em variáveis para serem passadas para segunda, uma possibilidade é trabalhar com parâmetros do tipo Output na primeira, ou então, gravar os dados em uma table que depois poderá ser utilizada pela segunda.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Sugerido como Resposta Giovani Cr segunda-feira, 28 de outubro de 2013 16:43
    • Marcado como Resposta Giovani Cr quarta-feira, 30 de outubro de 2013 16:48
    sexta-feira, 25 de outubro de 2013 16:51

Todas as Respostas

  • Marcelo,

          Você pode fazer isso utilizando um CURSOR ou o WHILE, sempre armazenando os parâmetros na procedure principal em variáveis, como for necessário, para executar a segunda procedure em um "loop". Abaixo segue uma idéia de como você pode montar esta solução utilizando WHILE.

    CREATE PROC P_EXEMPLO
    AS
    DECLARE @VALOR           VARCHAR(10)
    DECLARE @POS             INT
    DECLARE @DELIMITADOR     CHAR(1)
    DECLARE @VALORES         VARCHAR(40)
    
    SET @VALORES ='12345,67890,321,654,987'
    SET @DELIMITADOR = ','
    
    SET @VALORES = @VALORES + @DELIMITADOR
    
    SET @POS = CHARINDEX(@DELIMITADOR, @VALORES)
    WHILE (@POS <> 0)
      BEGIN
         SET @VALOR = SUBSTRING(@VALORES, 1, @POS - 1)
         
         EXEC (PROC P_EXEMPLO2 @VALOR)
    
    
         SET @VALORES = SUBSTRING(@VALORES,@POS + 1,LEN(@VALORES))
         SET @POS = CHARINDEX(@DELIMITADOR, @VALORES)
      END 
    GO


    Espero que seja útil para você.

    Abraços,

    Durval Ramos
     Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    quarta-feira, 23 de outubro de 2013 23:43
    Moderador
  • Marcelo,

    Você destacou que os valores da primeira tem que ser passado para segunda!!!

    Neste caso minha sugestão é que você armazene os resultados em variáveis para serem passadas para segunda, uma possibilidade é trabalhar com parâmetros do tipo Output na primeira, ou então, gravar os dados em uma table que depois poderá ser utilizada pela segunda.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Sugerido como Resposta Giovani Cr segunda-feira, 28 de outubro de 2013 16:43
    • Marcado como Resposta Giovani Cr quarta-feira, 30 de outubro de 2013 16:48
    sexta-feira, 25 de outubro de 2013 16:51