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