Ir para conteúdo

Arquivado

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

jothaz

[Resolvido] Stored procedure chamando stored procedure e recebe retorn

Recommended Posts

Stored procudre chamando stored procedure e recebe retorno

 

Pessoal,

 

Dando continuidade nos posts com dicas e tutorias básico segue mais um exemplo.

 

Neste post será apresentado um exemplo de uma stored procedure que chama outra stored procedure e a mesma retorna um valor qualquer.

 

Utiliazei a idéia do tópico sobre WHERE dinâmico e adicionando a variavel @OPCAO notem que não é opcional e deverá ser passada como parâmetro.

 

Caso a sp seja chamada assim:

SP_CHAMANDO_SP_COM_RETORNO(2) --> será executada a expressão do IF @OPCAO = 2 retornando o resulado

Se for assim:

SP_CHAMANDO_SP_COM_RETORNO(1)

--> será executada a expressão do IF @OPCAO = 2 retornando o resulado

Ou

SP_CHAMANDO_SP_COM_RETORNO(1,'DF','Brasilia')

--> será executada a expressão do IF @OPCAO = 1 que por sua vez execura a mesma stored procedure

passando com parâmetro @OPCAO = 2. Assim a sp será executada novamente na expressão dentro

do IF @OPCAO = 2 que retornará o resultado da execução.

Segue exemplo:

----- INICIO DA PROCEDURE -----------------------------------------------------------------------------------CREATE PROC SP_CHAMANDO_SP_COM_RETORNO(	@OPCAO		INT,	@UF		  CHAR(2)  = NULL,	@CIDADE	  VARCHAR(30)  = NULL,	@BAIRRO	  VARCHAR(30)  = NULL,	@PC_FINAL_CONCLUIDO DECIMAL(10,2) = NULL  OUTPUT)AS  IF @OPCAO = 1 BEGIN	--	-- Chama SP_CHAMANDO_SP_COM_RETORNO passando com @OPCAO = 2	-- e recebe o retorno na variável @PC_FINAL_CONCLUIDO	--	EXEC  SP_CHAMANDO_SP_COM_RETORNO 2,NULL,NULL,NULL, @PC_FINAL_CONCLUIDO  OUTPUT	SELECT  *,@PC_FINAL_CONCLUIDO	FROM	CLIENTES	WHERE	  -- FILTROS OPCIONAIS ----------------------------------------------------------------------------------------			(@UF		IS NULL OR UFA		= @UF)		AND			(@CIDADE	IS NULL OR CIDADE   = @CIDADE) 	AND			(@BAIRRO	IS NULL OR BAIRRO   = @BAIRRO)		ORDER BY UF,CIDADE,BAIRROENDIF @OPCAO = 2 BEGIN	--	-- Estou simplemente jogando o valro 5 para variavel	-- mas aqui poderá ser incluido quaquel expressão SQL	-- é só executar um select retornando a váriavel	SELECT @PC_FINAL_CONCLUIDO =  5	SELECT @PC_FINAL_CONCLUIDO   AS PC_FINAL_CONCLUIDO END
Considerações finais:

 

Acho que ficou um pouco complicado mas o exemplo seria basicamente um stored procedure recurssiva e totalmente dinâmica.

 

O mais puristas podem argumentar que a utilização de uma função criada pelo usuário executaria o mesmo processo de maneira mais elegante. O que tenho de concordar. Mas é bom lembrar que o exemplo acima fucinona em qualquer banco de dados SQL que utlize o padrão ANSI. Este exemplo tive desenvolver porque estavamos utilizando SYBASE que não possui funções.

 

Fonte/Autor/link

AUTOR: "Jothaz" e "Bruno" com a benção do "Geandre"

 

Dúvidas, criticas, contribuições, correções e adições serão bem vindas.

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.