locked
Criar Function para retorar varios valores RRS feed

  • Pergunta

  • Prezados, necessito fazer uma verificação em 3 campos de uma tabela onde originará um novo numero. Pensei em fazer fica function, onde passaria por parametro o valor e a função me retornaria os valores do codigo, porem estou encontrando problemas. Segue abaixo script para melhor entendimento.

    drop table #BoletoDocumento
    
    Create table #BoletoDocumento(
    	IdBoletoDocumento int identity,
    	IdentificacaoBancoBoleto char(5),
    	Carteira char(2),
    	BoletoNumero char(5),
    	BoletoOrdem char(4)
    	)
    go
    Insert into #BoletoDocumento Values('104-0','24','11415','0102'), ('104-0','24','11423','0303'),('104-0','24','10155','0111'),('104-0','24','12414','0101')
    go
    --Criar Função para gerar Nosso Numero
    Create function funGeraNossoNumero(@Banco char(5))
    returns char(17)
    as
    Begin
    	Declare @NossoNumero char(17);
    	If @Banco = '104-0'
    		set @NossoNumero = (Select
    								LTRIM(RTRIM(Carteira)) + 
    								REPLICATE('0', 15 - LEN(CAST(BoletoNumero AS varchar(10)) + '-'
    								+ CAST(BoletoOrdem AS varchar(10)))) 
    								+ CAST(BoletoNumero AS varchar(10)) +  '-'
    								+ CAST(BoletoOrdem AS varchar(10))
    								NossoNumero
    							from #BoletoDocumento 
    							)
    		return @NossoNumero
    end
    go
    --Chamada da Função
    Select
    	IdBoletoDocumento ,
    	funGeraNossoNumero(IdentificacaoBancoBoleto )
    from #BoletoDocumento 
    go

    Contando com a ajuda de todos


    Marcelo Nogueira

    segunda-feira, 9 de abril de 2012 17:50

Respostas

  • Boa tarde Marcelinho,

    Veja se fazendo conforme o script abaixo da certo.

    Mudei um pouco seu exemplo.

    -- Criando tabela ( não foi tabela temporaria )
    Create table BoletoDocumento(
    	IdBoletoDocumento int identity,
    	IdentificacaoBancoBoleto char(5),
    	Carteira char(2),
    	BoletoNumero char(5),
    	BoletoOrdem char(4)
    	)
    go
    -- Executando os inserts
    Insert into BoletoDocumento Values('104-0','24','11415','0102'), ('104-0','24','11423','0303'),('104-0','24','10155','0111'),('104-0','24','12414','0101')
    go
    --Criar Função para gerar Nosso Numero
    Create function funGeraNossoNumero(@Banco char(5), @idBoleto int)
    returns char(17)
    as
    Begin
    	Declare @NossoNumero char(17);
    	If @Banco = '104-0'
    		set @NossoNumero = (Select
    								LTRIM(RTRIM(Carteira)) + 
    								REPLICATE('0', 15 - LEN(CAST(BoletoNumero AS varchar(10)) + '-'
    								+ CAST(BoletoOrdem AS varchar(10)))) 
    								+ CAST(BoletoNumero AS varchar(10)) +  '-'
    								+ CAST(BoletoOrdem AS varchar(10))
    								NossoNumero
    							from BoletoDocumento 
    							where IdBoletoDocumento = @idBoleto
    							)
    		return @NossoNumero
    end
    go
    
    --Chamada da Função
    Select
    	IdBoletoDocumento 
    	,dbo.funGeraNossoNumero(IdentificacaoBancoBoleto,IdBoletoDocumento )
    	
    from BoletoDocumento 
    go

    Att,

    Adriano


    segunda-feira, 9 de abril de 2012 19:11

Todas as Respostas

  • Boa tarde Marcelinho,

    Veja se fazendo conforme o script abaixo da certo.

    Mudei um pouco seu exemplo.

    -- Criando tabela ( não foi tabela temporaria )
    Create table BoletoDocumento(
    	IdBoletoDocumento int identity,
    	IdentificacaoBancoBoleto char(5),
    	Carteira char(2),
    	BoletoNumero char(5),
    	BoletoOrdem char(4)
    	)
    go
    -- Executando os inserts
    Insert into BoletoDocumento Values('104-0','24','11415','0102'), ('104-0','24','11423','0303'),('104-0','24','10155','0111'),('104-0','24','12414','0101')
    go
    --Criar Função para gerar Nosso Numero
    Create function funGeraNossoNumero(@Banco char(5), @idBoleto int)
    returns char(17)
    as
    Begin
    	Declare @NossoNumero char(17);
    	If @Banco = '104-0'
    		set @NossoNumero = (Select
    								LTRIM(RTRIM(Carteira)) + 
    								REPLICATE('0', 15 - LEN(CAST(BoletoNumero AS varchar(10)) + '-'
    								+ CAST(BoletoOrdem AS varchar(10)))) 
    								+ CAST(BoletoNumero AS varchar(10)) +  '-'
    								+ CAST(BoletoOrdem AS varchar(10))
    								NossoNumero
    							from BoletoDocumento 
    							where IdBoletoDocumento = @idBoleto
    							)
    		return @NossoNumero
    end
    go
    
    --Chamada da Função
    Select
    	IdBoletoDocumento 
    	,dbo.funGeraNossoNumero(IdentificacaoBancoBoleto,IdBoletoDocumento )
    	
    from BoletoDocumento 
    go

    Att,

    Adriano


    segunda-feira, 9 de abril de 2012 19:11
  • Perfeito, sua resposta me proporcionou ainda mais clareza. Ao inves de tratar os campos pela function passei a enviar os dados por parametros exemplo:

    Select.... funGeraNossoNumero(Banco,Carteira,BoletoNumeto)....from ....

    Com isso passo os parametros atraves do select e a função trata as variaveis.

    Sua resposta me abriu os caminhos,

    Grato pela atenção


    Marcelo Nogueira

    terça-feira, 10 de abril de 2012 17:42