none
Programação de Function RRS feed

  • Pergunta

  • Pessoal,

    Estou tentando criar uma Function que retorne o valor de duas tabelas distintas. O problema é o seguinte:

    Escreva uma função que retorne a renda salarial de todos os clientes, incluindo na renda de cada um o salário do seu cônjuge daqueles que são casados.

    Tables:

    create table cliente
    (
    cod int not null identity,
    nome varchar(50),
    renda float,
    estadoCivil varchar(20)
    );

    create table conjuge
    (
    codCliente int not null,
    nome_conjuge varchar(50),
    renda_conjuge float
    );

    Construi o seguinte código:

    create function rendaCliente (@Codigo int)

    returns float
    as
    begin
            declare @rendaCli float = (select renda from cliente where cod = 3)
            declare @rendaConjuge float = (select renda_conjuge from conjuge where codCliente = 3)
            declare @ec varchar(20) = (select estadoCivil from cliente where cod = 3)
            declare @renda float
                
            select renda, nome from cliente where estadoCivil = @ec
            if(@ec = 'solteiro')
            set @renda = @rendaCli
            else if(@ec = 'casado')
            set @renda = @rendaConjuge + @rendaCli

            return @renda
    end

    Só que me traz o erro de que não posso retornar um valor para o cliente, ou seja, não estou conseguindo inserir somente o valor da variável.

    Alguém pode me ajudar, por favor???

    segunda-feira, 19 de maio de 2014 13:52

Respostas

  • --testes: SELECT coluna2 = dbo.rendaCliente1(3);
    
    create function dbo.rendaCliente1 (@Codigo int)
    
    returns float
    as
    begin
            declare @renda float
       	    set @renda = (select top 1 renda from cliente (NOLOCK) where cod = @Codigo); 
    
    		if (select TOP 1 estadoCivil from cliente (NOLOCK) where cod = @Codigo) = 'casado'
            BEGIN
    			IF exists(select TOP 1 isnull(renda_conjuge,0) from conjuge (NOLOCK) where codCliente = @Codigo)
    				set @renda = @renda + (select TOP 1 isnull(renda_conjuge,0) from conjuge  (NOLOCK) where codCliente = @Codigo);
    		end
            return @renda
    end


    • Editado Jose Geraldo segunda-feira, 19 de maio de 2014 17:02 .
    • Sugerido como Resposta Giovani Cr segunda-feira, 19 de maio de 2014 19:15
    • Marcado como Resposta Ricardo Barbosa Cortes terça-feira, 20 de maio de 2014 20:23
    segunda-feira, 19 de maio de 2014 16:59
  • Respondi neste fórum:

    http://forum.imasters.com.br/topic/521342-programacao-de-function

    Mas segue a resposta:

    IF EXISTS (select 1 from sys.objects where name  = 'rendaCliente' and type = 'FN')
    drop function rendaCliente
    GO
     
    CREATE function rendaCliente (@Codigo int)
     
    returns float
    as
    begin
    declare @renda float
     
    SELECT  @renda = (isnull(a.renda,0) + isnull(b.renda_conjuge,0))
    from cliente a 
    left join conjuge b on a.cod = b.codCliente
    WHERE a.cod = @Codigo
    and upper(a.estadoCivil) = 'CASADO'
     
    return @renda
     
    end
     
    select *, dbo.rendaCliente(a.cod) as renda_total from cliente a  left join conjuge b on a.cod = b.codCliente
    

    segunda-feira, 19 de maio de 2014 17:02

Todas as Respostas

  • --testes: SELECT coluna2 = dbo.rendaCliente1(3);
    
    create function dbo.rendaCliente1 (@Codigo int)
    
    returns float
    as
    begin
            declare @renda float
       	    set @renda = (select top 1 renda from cliente (NOLOCK) where cod = @Codigo); 
    
    		if (select TOP 1 estadoCivil from cliente (NOLOCK) where cod = @Codigo) = 'casado'
            BEGIN
    			IF exists(select TOP 1 isnull(renda_conjuge,0) from conjuge (NOLOCK) where codCliente = @Codigo)
    				set @renda = @renda + (select TOP 1 isnull(renda_conjuge,0) from conjuge  (NOLOCK) where codCliente = @Codigo);
    		end
            return @renda
    end


    • Editado Jose Geraldo segunda-feira, 19 de maio de 2014 17:02 .
    • Sugerido como Resposta Giovani Cr segunda-feira, 19 de maio de 2014 19:15
    • Marcado como Resposta Ricardo Barbosa Cortes terça-feira, 20 de maio de 2014 20:23
    segunda-feira, 19 de maio de 2014 16:59
  • Respondi neste fórum:

    http://forum.imasters.com.br/topic/521342-programacao-de-function

    Mas segue a resposta:

    IF EXISTS (select 1 from sys.objects where name  = 'rendaCliente' and type = 'FN')
    drop function rendaCliente
    GO
     
    CREATE function rendaCliente (@Codigo int)
     
    returns float
    as
    begin
    declare @renda float
     
    SELECT  @renda = (isnull(a.renda,0) + isnull(b.renda_conjuge,0))
    from cliente a 
    left join conjuge b on a.cod = b.codCliente
    WHERE a.cod = @Codigo
    and upper(a.estadoCivil) = 'CASADO'
     
    return @renda
     
    end
     
    select *, dbo.rendaCliente(a.cod) as renda_total from cliente a  left join conjuge b on a.cod = b.codCliente
    

    segunda-feira, 19 de maio de 2014 17:02