Ir para conteúdo

Arquivado

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

inforthiago

[Resolvido] Problema com funções

Recommended Posts

Olá pessoal !!!

 

Estou com um devido problema, não consigo achar o que tem de errrado nessa query que eu tentei recriar de um artigo q eu encontrei na net.

 

Criei uma tabela virtual para fazer o que o artigo mandava !!! Mas não consegui que desse o resultado. Sem mais delongas, segue abaixo a query que eu criei pelo artigo.

 

--ESTA FUNÇÃO RECEBE COMO PARAMETRO O NOME DA ECOMENDA  
--RETORNA A LISTA DE ESTADOS PARA QUAL A ECOMENDA FOI ENVIADA
CREATE FUNCTION F_AGRUPA(@DESC VARCHAR(50))
RETURNS VARCHAR(100)
BEGIN
	DECLARE @RETORNO VARCHAR(100)

	SELECT @RETORNO = COALESCE(@RETORNO+ ',', SPACE(0)) + UF_ECOMENDA
	FROM @TESTE
	WHERE DESC_ECOMENDA = @DESC
	
	RETURN @RETORNO
END

set nocount on
declare @TESTE table (COD_ENCOMENDA varchar(5), DESC_ECOMENDA varchar(10), UF_ECOMENDA varchar(2))
insert into @teste (COD_ENCOMENDA, DESC_ECOMENDA, UF_ECOMENDA) values ('ENV01', 'Produto x', 'MG')
insert into @teste (COD_ENCOMENDA, DESC_ECOMENDA, UF_ECOMENDA) values ('ENV02', 'Produto Y', 'SP')
insert into @teste (COD_ENCOMENDA, DESC_ECOMENDA, UF_ECOMENDA) values ('ENV03', 'Produto x', 'SP')
insert into @teste (COD_ENCOMENDA, DESC_ECOMENDA, UF_ECOMENDA) values ('ENV04', 'Produto Z', 'MG')
insert into @teste (COD_ENCOMENDA, DESC_ECOMENDA, UF_ECOMENDA) values ('ENV05', 'Produto Y', 'RJ')
insert into @teste (COD_ENCOMENDA, DESC_ECOMENDA, UF_ECOMENDA) values ('ENV06', 'Produto Z', 'BA')

--SELECT COD_ENCOMENDA, DESC_ECOMENDA, UF_ECOMENDA FROM @TESTE

SELECT DESC_ECOMENDA,
	MAX (dbo.F_AGRUPA(DESC_ECOMENDA)) AS UF_ENVIADAS
FROM @TESTE
GROUP BY DESC_ECOMENDA
ORDER BY DESC_ECOMENDA

ERRO:

 

Server: Msg 137, Level 15, State 2, Procedure F_AGRUPA, Line 10
Must declare the variable '@TESTE'.
Server: Msg 156, Level 15, State 1, Procedure F_AGRUPA, Line 15
Incorrect syntax near the keyword 'set'.
Esse é o erro q esta dando quando eu executo a query.

 

 

Segue tb o artigo que eu me basiei para montar essa query.

 

http://www.devmedia.com.br/articles/viewco...mp=9724&hl=

Compartilhar este post


Link para o post
Compartilhar em outros sites

inforthiago

 

aki no trampo eu nao consigo ver alguns sites e este da devmedia eh um deles =\

 

Não sei o retorno que você precisa, mas aki http://forum.imasters.com.br/index.php?showtopic=224862 e aki http://forum.imasters.com.br/index.php?showtopic=224848 tem uso de funções.

 

Abaixo tem um codigo, em que subistitui o @teste por uma tabela fisica teste.

CREATE table teste (COD_ENCOMENDA varchar(5), DESC_ECOMENDA varchar(10), UF_ECOMENDA varchar(2))
insert into teste (COD_ENCOMENDA, DESC_ECOMENDA, UF_ECOMENDA) values ('ENV01', 'Produto x', 'MG')
insert into teste (COD_ENCOMENDA, DESC_ECOMENDA, UF_ECOMENDA) values ('ENV02', 'Produto Y', 'SP')
insert into teste (COD_ENCOMENDA, DESC_ECOMENDA, UF_ECOMENDA) values ('ENV03', 'Produto x', 'SP')
insert into teste (COD_ENCOMENDA, DESC_ECOMENDA, UF_ECOMENDA) values ('ENV04', 'Produto Z', 'MG')
insert into teste (COD_ENCOMENDA, DESC_ECOMENDA, UF_ECOMENDA) values ('ENV05', 'Produto Y', 'RJ')
insert into teste (COD_ENCOMENDA, DESC_ECOMENDA, UF_ECOMENDA) values ('ENV06', 'Produto Z', 'BA')

-- SELECT COD_ENCOMENDA, DESC_ECOMENDA, UF_ECOMENDA FROM teste
GO
--ESTA FUNÇÃO RECEBE COMO PARAMETRO O NOME DA ECOMENDA  
--RETORNA A LISTA DE ESTADOS PARA QUAL A ECOMENDA FOI ENVIADA
CREATE FUNCTION F_AGRUPA(@DESC VARCHAR(50))
RETURNS VARCHAR(100)
BEGIN
	DECLARE @RETORNO VARCHAR(100)

	SELECT @RETORNO = COALESCE(@RETORNO+ ',', SPACE(0)) + UF_ECOMENDA
	FROM teste
	WHERE DESC_ECOMENDA = @DESC
	
	RETURN @RETORNO
END

GO

SELECT DESC_ECOMENDA,
	MAX (dbo.F_AGRUPA(DESC_ECOMENDA)) AS UF_ENVIADAS
FROM teste
GROUP BY DESC_ECOMENDA
ORDER BY DESC_ECOMENDA


DROP TABLE teste
DROP FUNCTION F_AGRUPA

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pelo retorno e nao eskece de postar oue você mexeu no seu codigo pra arrumar rs

pode ser util para muita gente

 

Abçs e boa sorte

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.