Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif
Ae galera dpois de muito tentar , resolvi pedir ajuda de vcs....
estou com uma procedure q retorna, os dados cadastrais de um cliente x, o problema é quando tem mais de uma informação
(ex...quando tem 3, 2 ou mais telefones), ae ela só ta retornando o último telefone e nunca os 3 telefones q eu quero, ae se alguém tiver uma idéia de como fazer me dá uma ajuda q a coisa ta feia....
eu fiz alguns testes (riscados) e eles me rotornão as 3 entradas.....menos o teste 5.....q me retorna uma só.....
Segue a procedure:
-CREATE PROC dbo.AP_CONSULTA_PESSOAL_CDE_2
declare @MATRICULA char(8)
declare @NOME varchar(40)
declare @SERVIDOR_ORGAO varchar(18)
set @MATRICULA = 'xxxxxxxx'
set @NOME ='jose limao'
set @SERVIDOR_ORGAO = '[srj0125\dsv]'
--set @MATRICULA = 'xxxxxxxx'
--set @NOME ='jose limao'
--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)
VALUES
(@NOME_EMPREGADO
,@MATRICULA_EMPREGADO
,@CARGO_EMPREGADO
,@FUNCAO_EMPREGADO
,NULL
,NULL
,NULL
,NULL
,@SITUACAO_EMPREGADO)
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)
,TEL_NU_DDD varchar(12)
,TEL_NU_TELEFONE 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, 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 + 'ORDER BY ORG_CO_GERAL DESC'
EXEC sp_executesql @TSQL
print 'passo1'
select * from ##tmp_lotacao
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 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
print 'passo2'
select count(*) from ##tmp_lotacao
IF (SELECT COUNT(*) AS TOTAL_LOTACAO FROM ##tmp_lotacao) = 0
BEGIN
SET @MCU_LOTACAO = NULL
SET @NOME_LOTACAO = NULL
SET @TEL_NU_DDD = NULL
SET @TEL_NU_TELEFONE = NULL
END
ELSE
BEGIN
SELECT @MCU_LOTACAO = L.ORG_CO_MCU
,@NOME_LOTACAO = L.ORG_NO_ORGAO
,@TEL_NU_DDD = L.TEL_NU_DDD
,@TEL_NU_TELEFONE = L.TEL_NU_TELEFONE
FROM ##tmp_lotacao L
END
print 'passo3'
select * from ##tmp_lotacao
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
print 'passo4'
select * from ##tmp_gerencia
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 )
VALUES
(@NOME_EMPREGADO
,@MATRICULA_EMPREGADO
,@CARGO_EMPREGADO
,@FUNCAO_EMPREGADO
,@MCU_LOTACAO
,@NOME_LOTACAO
,@MCU_GERENCIA
,@NOME_GERENCIA
,@SITUACAO_EMPREGADO
,@TEL_NU_DDD
,@TEL_NU_TELEFONE )
print 'passo5'
select count(*) as total_resultado from ##tmp_resultado
DROP TABLE ##tmp_lotacao
DROP TABLE ##tmp_gerencia
--Retorno dos dados do empregado
SELECT *
FROM ##tmp_resultado
END
DROP TABLE ##tmp_empregado
DROP TABLE ##tmp_resultado
END
GO
ae galera..ajuda ae
http://forum.imasters.com.br/public/style_emoticons/default/joia.gif
Carregando comentários...