Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.