Ir para conteúdo

POWERED BY:

Arquivado

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

vegetassj4

Consulta não retorna registros relacionados

Recommended Posts

Grande galera, o problema é o seguinte: esssa consulta deveria retornar os dados do funcionário, o problema é q quando o funcionário não tem um telefone cadastrado ela não retorna nada(nome,matricula,lotação......nada, nem o telefone).

Será q alguém ae pode dar uma ajuda?

 

oia o bicho ae.....

declare @MATRICULA char(8)	,@NOME varchar(40)	,@SERVIDOR_ORGAO varchar(18)	set @MATRICULA = '11111111' 	set @NOME = 'denival marcelino'	set @SERVIDOR_ORGAO = '[srj0125\dsv]'	BEGIN	DECLARE @TSQL nvarchar(4000)		   ,@NOME_EMPREGADO varchar(72)		   ,@MATRICULA_EMPREGADO varchar(8)		   ,@CARGO_EMPREGADO varchar(40)		   ,@FUNCAO_EMPREGADO varchar(40)		   ,@MCU_LOTACAO char(12)		   ,@NOME_LOTACAO varchar(30)		   ,@MCU_GERENCIA char(12)		   ,@NOME_GERENCIA varchar(30)		   ,@SITUACAO_EMPREGADO char(1)		   ,@TEL_NU_DDD varchar (12)		   ,@TEL_NU_TELEFONE varchar (30)			--Tabela que irá retornar os dados	CREATE TABLE ##tmp_resultado		(NOME_EMPREGADO varchar(72)		,MATRICULA_EMPREGADO varchar(8)		,CARGO_EMPREGADO varchar(40)		,FUNCAO_EMPREGADO varchar(40)		,MCU_LOTACAO char(12)		,NOME_LOTACAO varchar(30)		,MCU_GERENCIA char(12)		,NOME_GERENCIA varchar(30)		,SITUACAO_EMPREGADO char(1)		,TEL_NU_DDD varchar (12)			,TEL_NU_TELEFONE varchar (30))	--Obtendo os dados do empregado	CREATE TABLE ##tmp_empregado	(PES_NO_PESSOAL varchar(72)	,PES_CO_MATRICULA varchar(8)	,ORG_CODIGO varchar(8)	,CAR_TX_CARGO varchar(40)	,FUN_TX_FUNCAO varchar(40)	,PES_TX_ATIVO char(1))		SET @TSQL = 'INSERT INTO ##tmp_empregado '	SET @TSQL = @TSQL + 'SELECT P.PES_NO_PESSOAL, P.PES_CO_MATRICULA, P.ORG_CODIGO, C.CAR_TX_CARGO, F.FUN_TX_FUNCAO, P.PES_TX_ATIVO '	SET @TSQL = @TSQL + 'FROM dbo.VW_CONSULTA_PESSOAL P '	SET @TSQL = @TSQL + ',dbo.PES_CARGO C '	SET @TSQL = @TSQL + ',dbo.PES_FUNCAO F '	SET @TSQL = @TSQL + 'WHERE P.CAR_CO_CARGO = C.CAR_CO_CARGO '	SET @TSQL = @TSQL + 'AND P.FUN_CO_FUNCAO = F.FUN_CO_FUNCAO '	IF @MATRICULA IS NOT NULL		SET @TSQL = @TSQL + 'AND P.PES_CO_MATRICULA = ''' + @MATRICULA + ''''	IF @NOME IS NOT NULL		SET @TSQL = @TSQL + 'AND P.PES_NO_PESSOAL LIKE ''' + @NOME + '%'''	EXEC sp_executesql @TSQL	--Existindo mais de um registro retornará todos os registros encontrados	IF (SELECT COUNT(*) AS TOTAL_EMPREGADO FROM ##tmp_empregado) > 1	BEGIN		--Lê todos os registros de empregado encontrados		DECLARE empregado_cursor CURSOR FOR		SELECT E.PES_NO_PESSOAL			  ,E.PES_CO_MATRICULA			  ,E.CAR_TX_CARGO			  ,E.FUN_TX_FUNCAO			  ,E.PES_TX_ATIVO		FROM ##tmp_empregado E			OPEN empregado_cursor			FETCH NEXT FROM empregado_cursor		INTO @NOME_EMPREGADO			,@MATRICULA_EMPREGADO			,@CARGO_EMPREGADO			,@FUNCAO_EMPREGADO			,@SITUACAO_EMPREGADO		WHILE @@FETCH_STATUS = 0		BEGIN			INSERT INTO ##tmp_resultado				(NOME_EMPREGADO				,MATRICULA_EMPREGADO				,CARGO_EMPREGADO				,FUNCAO_EMPREGADO				,MCU_LOTACAO				,NOME_LOTACAO				,MCU_GERENCIA				,NOME_GERENCIA				,SITUACAO_EMPREGADO				,TEL_NU_DDD					,TEL_NU_TELEFONE)			VALUES				(@NOME_EMPREGADO				,@MATRICULA_EMPREGADO				,@CARGO_EMPREGADO				,@FUNCAO_EMPREGADO				,NULL				,NULL				,NULL				,NULL				,@SITUACAO_EMPREGADO				,Null				,Null)				   	FETCH NEXT FROM empregado_cursor			INTO @NOME_EMPREGADO				,@MATRICULA_EMPREGADO				,@CARGO_EMPREGADO		   		,@FUNCAO_EMPREGADO		   		,@SITUACAO_EMPREGADO		END		CLOSE empregado_cursor		DEALLOCATE empregado_cursor				--Retorno dos empregados encontrados		SELECT * 		FROM ##tmp_resultado	END	ELSE	BEGIN		--Obtendo os dados da lotação do empregado		CREATE TABLE ##tmp_lotacao		(ORG_CO_MCU char(12)		,ORG_NO_ORGAO varchar(30))				SET @TSQL = 'INSERT INTO ##tmp_lotacao '		SET @TSQL = @TSQL + 'SELECT O.ORG_CO_MCU, O.ORG_NO_ORGAO '		SET @TSQL = @TSQL + 'FROM ' + @SERVIDOR_ORGAO + '.DBORGAO.dbo.VW_ORGAO O, ##tmp_empregado E '		SET @TSQL = @TSQL + 'WHERE O.ORG_CO_STO = E.ORG_CODIGO '		SET @TSQL = @TSQL + 'AND ORG_IN_STATUS = ''2'' '		EXEC sp_executesql @TSQL		IF (SELECT COUNT(*) AS TOTAL_LOTACAO FROM ##tmp_lotacao) = 0		BEGIN			DELETE ##tmp_lotacao						SET @TSQL = 'INSERT INTO ##tmp_lotacao '			SET @TSQL = @TSQL + 'SELECT O.ORG_CO_MCU, O.ORG_NO_ORGAO '			SET @TSQL = @TSQL + 'FROM ' + @SERVIDOR_ORGAO + '.DBORGAO.dbo.VW_ORGAO O, ##tmp_empregado E '			SET @TSQL = @TSQL + 'WHERE O.ORG_CO_STO = E.ORG_CODIGO '			SET @TSQL = @TSQL + 'ORDER BY ORG_CO_GERAL DESC'						EXEC sp_executesql @TSQL		END							--Obtendo os dados da gerência do empregado		CREATE TABLE ##tmp_gerencia		(ORG_CO_MCU_SUB char(12)		,ORG_NO_ORGAO varchar(30))			SET @TSQL = 'INSERT INTO ##tmp_gerencia '		SET @TSQL = @TSQL + 'SELECT H.ORG_CO_MCU_SUB, O.ORG_NO_ORGAO '		SET @TSQL = @TSQL + 'FROM ' + @SERVIDOR_ORGAO + '.DBORGAO.dbo.VW_ORGAO O, ' +  @SERVIDOR_ORGAO + '.DBORGAO.dbo.VW_HIERARQUIA H, ##tmp_lotacao L '		SET @TSQL = @TSQL + 'WHERE H.ORG_CO_MCU_SUB = O.ORG_CO_MCU '		SET @TSQL = @TSQL + 'AND H.ORG_CO_MCU = L.ORG_CO_MCU '		SET @TSQL = @TSQL + 'AND O.ORG_IN_NIVEL_HIERARQUICO = ''20'' '		SET @TSQL = @TSQL + 'ORDER BY O.ORG_IN_NIVEL_HIERARQUICO DESC'		EXEC sp_executesql @TSQL		IF (SELECT COUNT(*) AS TOTAL_GERENCIA FROM ##tmp_gerencia) = 0		BEGIN			DELETE ##tmp_gerencia			SET @TSQL = 'INSERT INTO ##tmp_gerencia '			SET @TSQL = @TSQL + 'SELECT H.ORG_CO_MCU_SUB, O.ORG_NO_ORGAO '			SET @TSQL = @TSQL + 'FROM ' + @SERVIDOR_ORGAO + '.DBORGAO.dbo.VW_ORGAO O, ' +  @SERVIDOR_ORGAO + '.DBORGAO.dbo.VW_HIERARQUIA H, ##tmp_lotacao L '			SET @TSQL = @TSQL + 'WHERE H.ORG_CO_MCU_SUB = O.ORG_CO_MCU '			SET @TSQL = @TSQL + 'AND H.ORG_CO_MCU = L.ORG_CO_MCU '			SET @TSQL = @TSQL + 'AND O.ORG_IN_NIVEL_HIERARQUICO = ''30'' '			SET @TSQL = @TSQL + 'ORDER BY O.ORG_IN_NIVEL_HIERARQUICO DESC'			EXEC sp_executesql @TSQL		END		ELSE IF (SELECT COUNT(*) AS TOTAL_GERENCIA FROM ##tmp_gerencia) = 0		BEGIN			DELETE ##tmp_gerencia			SET @TSQL = 'INSERT INTO ##tmp_gerencia '			SET @TSQL = @TSQL + 'SELECT H.ORG_CO_MCU_SUB, O.ORG_NO_ORGAO '			SET @TSQL = @TSQL + 'FROM ' + @SERVIDOR_ORGAO + '.DBORGAO.dbo.VW_ORGAO O, ' +  @SERVIDOR_ORGAO + '.DBORGAO.dbo.VW_HIERARQUIA H, ##tmp_lotacao L '			SET @TSQL = @TSQL + 'WHERE H.ORG_CO_MCU_SUB = O.ORG_CO_MCU '			SET @TSQL = @TSQL + 'AND H.ORG_CO_MCU = L.ORG_CO_MCU '			SET @TSQL = @TSQL + 'AND O.ORG_IN_NIVEL_HIERARQUICO = ''10'' '			SET @TSQL = @TSQL + 'ORDER BY O.ORG_IN_NIVEL_HIERARQUICO DESC'			EXEC sp_executesql @TSQL		END		ELSE IF (SELECT COUNT(*) AS TOTAL_GERENCIA FROM ##tmp_gerencia) = 0		BEGIN			DELETE ##tmp_gerencia			SET @TSQL = 'INSERT INTO ##tmp_gerencia '			SET @TSQL = @TSQL + 'SELECT H.ORG_CO_MCU_SUB, O.ORG_NO_ORGAO '			SET @TSQL = @TSQL + 'FROM ' + @SERVIDOR_ORGAO + '.DBORGAO.dbo.VW_ORGAO O, ' +  @SERVIDOR_ORGAO + '.DBORGAO.dbo.VW_HIERARQUIA H, ##tmp_lotacao L '			SET @TSQL = @TSQL + 'WHERE H.ORG_CO_MCU_SUB = O.ORG_CO_MCU '			SET @TSQL = @TSQL + 'AND H.ORG_CO_MCU = L.ORG_CO_MCU '			SET @TSQL = @TSQL + 'AND O.ORG_IN_NIVEL_HIERARQUICO = ''00'' '			SET @TSQL = @TSQL + 'ORDER BY O.ORG_IN_NIVEL_HIERARQUICO DESC'			EXEC sp_executesql @TSQL		END				--Obtendo o telefone do empregado		CREATE TABLE ##tmp_telefone		(TEL_NU_DDD varchar(12)		,TEL_NU_TELEFONE varchar(30) )				SET @TSQL = 'INSERT INTO ##tmp_telefone '		SET @TSQL = @TSQL + 'SELECT T.TEL_NU_DDD, T.TEL_NU_TELEFONE '		SET @TSQL = @TSQL + 'FROM ' + @SERVIDOR_ORGAO + '.DBORGAO.dbo.VW_ORGAO O,'+ @SERVIDOR_ORGAO + '.DBORGAO.dbo.VW_TELEFONE T,'+' ##tmp_empregado E '		SET @TSQL = @TSQL + 'WHERE O.ORG_CO_STO = E.ORG_CODIGO AND O.ORG_CO_MCU = T.ORG_CO_MCU '		SET @TSQL = @TSQL + 'AND ORG_IN_STATUS = ''2'' '		EXEC sp_executesql @TSQL		IF (SELECT COUNT(*) AS TOTAL_LOTACAO FROM ##tmp_telefone) = 0		BEGIN			DELETE ##tmp_telefone						SET @TSQL = 'INSERT INTO ##tmp_telefone '			SET @TSQL = @TSQL + 'SELECT T.TEL_NU_DDD, T.TEL_NU_TELEFONE '			SET @TSQL = @TSQL + 'FROM ' + @SERVIDOR_ORGAO + '.DBORGAO.dbo.VW_ORGAO O,'+ @SERVIDOR_ORGAO + '.DBORGAO.dbo.VW_TELEFONE T,'+' ##tmp_empregado E, ##tmp_lotacao L '			SET @TSQL = @TSQL + 'WHERE O.ORG_CO_STO = E.ORG_CODIGO AND O.ORG_CO_MCU = T.ORG_CO_MCU '			SET @TSQL = @TSQL + 'ORDER BY ORG_CO_GERAL DESC'						EXEC sp_executesql @TSQL		END		--Obtendo todos os dados encontrados do empregado		SELECT @NOME_EMPREGADO = E.PES_NO_PESSOAL			  ,@MATRICULA_EMPREGADO = E.PES_CO_MATRICULA			  ,@CARGO_EMPREGADO = E.CAR_TX_CARGO			  ,@FUNCAO_EMPREGADO = E.FUN_TX_FUNCAO			  ,@SITUACAO_EMPREGADO = E.PES_TX_ATIVO		FROM ##tmp_empregado E				IF (SELECT COUNT(*) AS TOTAL_LOTACAO FROM ##tmp_lotacao) = 0		BEGIN			SET @MCU_LOTACAO = NULL			SET @NOME_LOTACAO = NULL							END				ELSE		BEGIN			SELECT @MCU_LOTACAO = L.ORG_CO_MCU			 		  ,@NOME_LOTACAO = L.ORG_NO_ORGAO			FROM ##tmp_lotacao L		END				IF (SELECT COUNT(*) AS TOTAL_GERENCIA FROM ##tmp_gerencia) = 0		BEGIN			SET @MCU_GERENCIA = NULL			SET @NOME_GERENCIA = NULL		END		ELSE		BEGIN			SELECT @MCU_GERENCIA = G.ORG_CO_MCU_SUB			 		 ,@NOME_GERENCIA = G.ORG_NO_ORGAO				  			FROM ##tmp_gerencia G		END		IF (SELECT COUNT(*) AS TOTAL_TELEFONE FROM ##tmp_telefone) = 0		BEGIN 			SET @TEL_NU_DDD = NULL			SET @TEL_NU_TELEFONE = NULL							END		ELSE		BEGIN			SELECT @TEL_NU_DDD = T.TEL_NU_DDD				  ,@TEL_NU_TELEFONE = T.TEL_NU_TELEFONE			FROM ##tmp_telefone T		END											INSERT INTO ##tmp_resultado			(NOME_EMPREGADO			,MATRICULA_EMPREGADO			,CARGO_EMPREGADO			,FUNCAO_EMPREGADO			,MCU_LOTACAO			,NOME_LOTACAO			,MCU_GERENCIA			,NOME_GERENCIA			,SITUACAO_EMPREGADO			,TEL_NU_DDD				,TEL_NU_TELEFONE )			select distinct e.PES_NO_PESSOAL			,e.PES_CO_MATRICULA			,e.CAR_TX_CARGO			,e.FUN_TX_FUNCAO			,l.ORG_CO_MCU			,l.ORG_NO_ORGAO			,g.ORG_CO_MCU_SUB			,g.ORG_NO_ORGAO			,e.PES_TX_ATIVO			,t.TEL_NU_DDD				,t.TEL_NU_TELEFONE 			from ##tmp_empregado e, ##tmp_lotacao l, ##tmp_gerencia g, ##tmp_telefone t				DROP TABLE ##tmp_lotacao		DROP TABLE ##tmp_gerencia		DROP TABLE ##tmp_telefone			--Retorno dos dados do empregado		SELECT top 1* 		FROM ##tmp_resultado	END		DROP TABLE ##tmp_empregado	DROP TABLE ##tmp_resultadoENDGO
valeu galera....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Camarada,

 

Sem quere ser pessimista mas um SP gigantesca desssas sem as tabelas e o ambiente para debugar fica mto dificil ajudar.

 

Pois sem conhecer as regras do negócio perdemos o norteador.

 

Dei uma olhada e levando em consideração o post que diz que qdo não tem fone não traz o resultado, achei pode ser alguma caoisa por aqui:

		SET @TSQL = 'INSERT INTO ##tmp_telefone '		SET @TSQL = @TSQL + 'SELECT T.TEL_NU_DDD, T.TEL_NU_TELEFONE '		SET @TSQL = @TSQL + 'FROM ' + @SERVIDOR_ORGAO + '.DBORGAO.dbo.VW_ORGAO O,'+ @SERVIDOR_ORGAO + '.DBORGAO.dbo.VW_TELEFONE T,'+' ##tmp_empregado E '		SET @TSQL = @TSQL + 'WHERE O.ORG_CO_STO = E.ORG_CODIGO AND O.ORG_CO_MCU = T.ORG_CO_MCU '		SET @TSQL = @TSQL + 'AND ORG_IN_STATUS = ''2'' '		EXEC sp_executesql @TSQL		IF (SELECT COUNT(*) AS TOTAL_LOTACAO FROM ##tmp_telefone) = 0		BEGIN
Pelo que puder entender este if: IF (SELECT COUNT(*) AS TOTAL_LOTACAO FROM ##tmp_telefone) = 0 é que esta impedindo a gravação do registro.

 

Agora o q deve ser feito:

[*]Retirar o IF

[*]Alterar o JOIN no WHERE colocando *= ou =* de acordo com expressão

Só você poderá decidir o que fazer.

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Camarada,

 

Sem quere ser pessimista mas um SP gigantesca desssas sem as tabelas e o ambiente para debugar fica mto dificil ajudar.

 

Pois sem conhecer as regras do negócio perdemos o norteador.

 

Dei uma olhada e levando em consideração o post que diz que qdo não tem fone não traz o resultado, achei pode ser alguma caoisa por aqui:

		SET @TSQL = 'INSERT INTO ##tmp_telefone '		SET @TSQL = @TSQL + 'SELECT T.TEL_NU_DDD, T.TEL_NU_TELEFONE '		SET @TSQL = @TSQL + 'FROM ' + @SERVIDOR_ORGAO + '.DBORGAO.dbo.VW_ORGAO O,'+ @SERVIDOR_ORGAO + '.DBORGAO.dbo.VW_TELEFONE T,'+' ##tmp_empregado E '		SET @TSQL = @TSQL + 'WHERE O.ORG_CO_STO = E.ORG_CODIGO AND O.ORG_CO_MCU = T.ORG_CO_MCU '		SET @TSQL = @TSQL + 'AND ORG_IN_STATUS = ''2'' '		EXEC sp_executesql @TSQL		IF (SELECT COUNT(*) AS TOTAL_LOTACAO FROM ##tmp_telefone) = 0		BEGIN
Pelo que puder entender este if: IF (SELECT COUNT(*) AS TOTAL_LOTACAO FROM ##tmp_telefone) = 0 é que esta impedindo a gravação do registro.

 

Agora o q deve ser feito:

[*]Retirar o IF

[*]Alterar o JOIN no WHERE colocando *= ou =* de acordo com expressão

Só você poderá decidir o que fazer.

 

t+

Poh valeu pelas dicas Jothaz, na verdade eu até imaginei q seria meio brabo arrumar uma ajuda, pois ela é enorme e, como você falou, sem as tabelas e sem debugar é complicado....mas vou continuar tentando aqui. valeu.

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.