Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

jonasnc2000

Programação de Function

Recommended Posts

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???

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, e este exercicio esta aqui:

http://docente.ifrn.edu.br/josecunha/disciplinas/ambiente-de-programacao-e-banco-de-dados/atividades/lista-geral-de-bd

 

Exerc: 72


Vamos lá...

vc tem os scripts de carga destas tabelas?

A estrutura eh esta mesmo?

nao tem um relacionamento entre elas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Scripts:

 

insert cliente(nome,renda,estadoCivil)
values
('Marcos Gonçalves',1400.00,'casado'),
('Kelen Moreira',2000.00,'casado'),
('Joseane Neves',1500.00,'casado'),
('Maria Costa',900.00,'solteiro'),
('Edson Costa',800.00,'solteiro'),
('Maria Fernanda',4000.00,'solteiro'),
('Jonas Neves',2000.00,'casado'),
('José Henrique',1200.00,'casado'),
('Luiz Antonio',1000.00,'casado'),
('Luzia Moreira',2500.00,'solteiro')

 

insert into conjuge(codCliente,nome_conjuge,renda_conjuge)
values
(1,'Jonas Costa',4000.00),
(2,'Denilson',800.00),
(6,'Kelen Moreira',2000.00),
(7,'Tereza',1200.00),
(8,'Cristina Correia',700.00),
(10,'Cinthia Novaes',1800.00)

 

como havia postado nos códigos acima, não Foreign key's nessas tabelas, só PK.

sem relacionamento!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estranho, mas como ainda esta aprendendo vamos lá.

CASE, tu sabe como funciona?

http://msdn.microsoft.com/pt-br/library/ms181765.aspx

 

na sua função, o unico parametro solicitado é o Codigo do Cliente?

Compartilhar este post


Link para o post
Compartilhar em outros sites

De acordo com os seus dados, fiz este exemplo:

Para teste:


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


Desisto de editar ¬¬

 

Da para entender né....

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.