Ir para conteúdo

POWERED BY:

Arquivado

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

MicheL Vilela

Erro Consulta DBO

Recommended Posts

Estou executando o seguinte comando no Query analyzer onde tenho nele a DBO "SOMAHORASPORFAMILIAMOVIMENTO" que está cadastrado no meu banco de dados.DECLARE @ID AS VARCHAR(20)DECLARE @DATAINICIO DATETIMEDECLARE @DATAFIM DATETIMEDECLARE @CODTMV AS VARCHAR (20)SET @ID = :PLN_$F$1_SSET @DATAINICIO = :PLN_$E53_DSET @DATAFIM = :PLN_$F53_DSET @CODTMV = :PLN_$I$52_SSELECT DBO.SOMAHORASPORFAMILIAMOVIMENTO (@ID, @DATAINICIO, @DATAFIM, @CODTMV)Porém no fim da execução tenho como retorno o seguinte erro: General SQL error.Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery.Não sei como fazer para corrigir esse erro, se alguém puder me dar uma força. A DBO está logo abaixo.Agradeço pela atenção!MicheL VilelaDBO SOMAHORASPORFAMILIAMOVIMENTO------------------------------------SET QUOTED_IDENTIFIER ON GOSET ANSI_NULLS ON GOALTER FUNCTION SOMAHORASPORFAMILIAMOVIMENTO (@ID AS VARCHAR(20), @DATAINICIO AS DATETIME, @DATAFIM AS DATETIME, @CODTMV AS VARCHAR(20))RETURNS DECIMAL(18,4)ASBEGIN DECLARE @IDELE VARCHAR (20) DECLARE @IDPAI VARCHAR (20) DECLARE @TORIGEM TABLE (IDOBJOF VARCHAR (20)) DECLARE @TTODOS TABLE (IDOBJ VARCHAR (20)) DECLARE @HORASPORFAMILIAMOVIMENTO DECIMAL (18,4) SET @IDELE = @ID INSERT INTO @TORIGEM (IDOBJOF) VALUES (@ID) INSERT INTO @TORIGEM (IDOBJOF) SELECT OBJ.IDOBJOF FROM OFOBJOFICINA OBJ (NOLOCK) WHERE OBJ.IDOBJOFPAI = @ID IF (SELECT OBJ.IDOBJOFPAI FROM OFOBJOFICINA OBJ (NOLOCK) WHERE OBJ.IDOBJOF = @ID) IS NOT NULL BEGIN INSERT INTO @TTODOS (IDOBJ) SELECT OBJ.IDOBJOFPAI FROM OFOBJOFICINA OBJ (NOLOCK) --INSERT PAI WHERE OBJ.IDOBJOF = @ID INSERT INTO @TORIGEM (IDOBJOF) SELECT OBJ.IDOBJOFPAI FROM OFOBJOFICINA OBJ (NOLOCK) --INSERT PAI WHERE OBJ.IDOBJOF = @ID SET @IDPAI = (SELECT OBJ.IDOBJOFPAI FROM OFOBJOFICINA OBJ (NOLOCK) WHERE OBJ.IDOBJOF = @ID) WHILE @IDPAI IS NOT NULL BEGIN IF (SELECT OBJ.IDOBJOFPAI FROM OFOBJOFICINA OBJ (NOLOCK) WHERE OBJ.IDOBJOF = @IDPAI) IS NOT NULL BEGIN INSERT INTO @TORIGEM (IDOBJOF) SELECT OBJ.IDOBJOFPAI FROM OFOBJOFICINA OBJ (NOLOCK) WHERE OBJ.IDOBJOF = @IDPAI SET @IDPAI = (SELECT OBJ.IDOBJOFPAI FROM OFOBJOFICINA OBJ (NOLOCK) WHERE OBJ.IDOBJOF = @IDPAI ) END ELSE SET @IDPAI = NULL END END WHILE EXISTS (SELECT IDOBJOF FROM @TORIGEM) BEGIN SET @ID = (SELECT TOP 1 IDOBJOF FROM @TORIGEM) DELETE FROM @TORIGEM WHERE IDOBJOF = @ID IF @ID NOT IN (SELECT IDOBJ FROM @TTODOS) INSERT INTO @TTODOS (IDOBJ) VALUES (@ID)--INSERT FILHOS IF @ID NOT IN (SELECT IDOBJ FROM @TTODOS) INSERT INTO @TTODOS (IDOBJ) SELECT OBJ.IDOBJOF FROM OFOBJOFICINA OBJ (NOLOCK) WHERE OBJ.IDOBJOFPAI = @ID INSERT INTO @TORIGEM(IDOBJOF) SELECT OBJ.IDOBJOF FROM OFOBJOFICINA OBJ (NOLOCK) WHERE OBJ.IDOBJOFPAI = @ID --INSERI PAI SE TEM & NÃO ESTA NA TABELA ORIGINAL @TORIGEM > SE ESTA NA TORIGEM SERÁ INSERIDA EM @TTODOS IF (SELECT OBJ.IDOBJOFPAI FROM OFOBJOFICINA OBJ (NOLOCK) WHERE OBJ.IDOBJOF = @ID) IS NOT NULL AND (SELECT OBJ.IDOBJOFPAI FROM OFOBJOFICINA OBJ (NOLOCK) WHERE OBJ.IDOBJOF = @ID) NOT IN (SELECT IDOBJOF FROM @TORIGEM) AND (SELECT OBJ.IDOBJOFPAI FROM OFOBJOFICINA OBJ (NOLOCK) WHERE OBJ.IDOBJOF = @ID) NOT IN (SELECT IDOBJ FROM @TTODOS ) INSERT INTO @TTODOS (IDOBJ) SELECT OBJ.IDOBJOFPAI FROM OFOBJOFICINA OBJ (NOLOCK) WHERE OBJ.IDOBJOF = @ID END BEGIN SET @HORASPORFAMILIAMOVIMENTO = ( SELECT SUM(i.EM_HORAS) FROM @TTODOS TT, ( SELECT ((CONVERT(DECIMAL, (DATEDIFF(MINUTE,INTER.INICIO, INTER.TERMINO))))/60) AS EM_HORAS, T.CODCOLIGADA AS COLIGADA, TIT.CODCCUSTO AS CCUSTO, OS.IDOBJOF AS IDOBJOF, TIPO.DESCRICAO AS OBJETO, TIT.IDMOV AS IDMOV FROM TITMMOV TIT (NOLOCK), TMOV T (NOLOCK), OFORDEMSERVICO OS (NOLOCK), OFTIPOOBJ TIPO (NOLOCK), OFOBJOFICINA OBJ (NOLOCK), OFLOGSERV INTER(NOLOCK) wHERE INTER.INICIO IS NOT NULL AND INTER.TERMINO IS NOT NULL AND T.SERIE = 'OS' AND T.STATUS <> 'C' AND T.IDMOV = TIT.IDMOV AND T.IDMOV = OS.IDMOV AND T.IDMOV = INTER.IDMOV AND T.CODCOLIGADA = OBJ.CODCOLIGADA AND T.CODCOLIGADA = TIT.CODCOLIGADA AND T.CODCOLIGADA = OS.CODCOLIGADA AND T.CODCOLIGADA = INTER.CODCOLIGADA AND OS.IDOBJOF = OBJ.IDOBJOF AND TIPO.IDTIPOOBJ = OBJ.IDTIPOOBJ AND INTER.NSEQITMMOV = TIT.NSEQITMMOV AND CODTMV = @CODTMV AND INTER.INICIO >= @DATAINICIO AND INTER.TERMINO <= DATEADD ( month , 1 , @DATAINICIO ) )i WHERE TT.IDOBJ = i.IDOBJOF ) ENDRETURN @HORASPORFAMILIAMOVIMENTOENDGOSET QUOTED_IDENTIFIER OFF GOSET ANSI_NULLS ON GO

Compartilhar este post


Link para o post
Compartilhar em outros sites

velho.. sua função está retornando mais de uma linha... e função, no seu mundo normal, retorna uma única linha!!! mas meio estranho.. pelo código não deveria né... ehehebom.. debugar eh a chave do negócio.. pega todo o código da função e roda no query analyzer como se fosse uma query comum... e na hora de mandar o RETURN.. faça um SELECT @HORASPORFAMILIAMOVIMENTO...você vai achar o seu erro ai, beleza?

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.