Ir para conteúdo

POWERED BY:

Arquivado

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

ronaldofm

Erro com a Procedure

Recommended Posts

Olá,Preciso criar uma procedure que futuramente gerará informações para um relatório, essa procedure gerará um relatório com uma determinada data de corte, ou seja vou ter uma consulta onde consulto todos os registros, depois eu faço um tratamento via cursor para selecionar somente os registros que estão com a sua situação igual a 2 e suas datas estão dentro da data de corte. Muito bem nunca trabalhei com cursores, mas li alguma coisa em um tutorial sobre o assunto e consegui caminhar até aki, será que alguém pde me ajudar daqui para frente.Obrigado,CREATE PROCEDURE sp_relcorte (@v_datacorte datetime) ASDECLARE Cur_Buscacorte cursor for SELECT Veiculo.Situacao, Veiculo.DataCompra, Veiculo_Marca.Descricao As Marca, Veiculo_Modelo.Descricao As Modelo, Veiculo_ModeloTipo.Descricao As Tipo, Veiculo_Combustivel.Descricao As Combustivel, Veiculo.Placa, Veiculo_Cor.Descricao As Cor, Veiculo.AnoModelo, Veiculo.ValorVenda , Veiculo.AcessoriosFROM Veiculo INNER JOIN Veiculo_ModeloTipo On Veiculo.Marca = Veiculo_ModeloTipo.Marca And Veiculo.Modelo = Veiculo_ModeloTipo.Modelo And Veiculo.Tipo = Veiculo_ModeloTipo.Codigo INNER JOIN Veiculo_Modelo On Veiculo.Marca = Veiculo_Modelo.Marca And Veiculo.Modelo = Veiculo_Modelo.Codigo INNER JOIN Veiculo_Marca On Veiculo.Marca = Veiculo_Marca.Codigo INNER JOIN Veiculo_Cor On Veiculo.Cor = Veiculo_Cor.Codigo INNER JOIN Veiculo_Combustivel On Veiculo.Combustivel = Veiculo_Combustivel.CodigoOpen Cur_BuscacorteFETCH next from Cur_Buscacortewhile @@FETCH_STATUS = 0BEGINif veiculo.Situacao = 2 and veiculo.DataCompra < @v_datacorteselect top 1 Veiculo_Movtos.Situacao, valorvenda from Veiculo_Movtos, veiculo whereVeiculo_Movtos.Placa = veiculo.Placa and Veiculo_Movtos.data < @v_datacorte END

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sinceramente, o seu cursor não esta dizendo muito. Veja bem amigo, defina melhor o que deseja fazer, para depois buscar uma solução. Cursor é um pouco chatinho de trabalhar, e pelo que vi, você só quer ter algum tipo de controle, que talvez uma query simplesmente pudesse resolver. Tente nos passar um pouco melhor o que deseja fazer e como, e ai definimos se não poderia estar usando por exemplo uma view...

Compartilhar este post


Link para o post
Compartilhar em outros sites

FETCH NEXT FROM (NOME DO CURSOR) INTO @VARIAVEL1 @VARIAVEL2 ....... RECUPERAR DADOS DA SUA CONSULTA		WHILE @@FETCH_STATUS = 0	BEGIN 		UPDATE (TABELA) SET VAR = @VAR , VAR2 = @VAR2 		WHERE CODIÇÃO = @CONDIÇÃO   	 		FETCH NEXT FROM (NOME DO CURSOR) INTO @VARIAVEL1 @VARIAVEL2 ....... RECUPERAR DADOS 	END

ISSO FOI PARTE DE UM CODIGO QUE EU FIZ, ACHO QUE PODE LHE SER UTIL. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,O meu problema é o seguinte, existe um sistema na empresa a qual eu trabalho que faz uma determinda consulta no banco, pega todos os registro e joga em um recordset, depois há uma outra query que compara os dados da query anterior e se estiver na condição selecionada a segunda query devolve apenas um registro e com isso monta um relatório. Claro existe um loop para fazer isso ao final mais ou menos a Primeirra query pegou uns 10000 registros e comparou com 20000 da segunda query e esse relatório é gerado um PDF.Tudo isso funcionava perfeitamente, no entanto devido acho eu a quantidade de registro isso tem travado, por isso tentei fazer uma procedure que fizesse, a mesma coisa. Deixando todo o processamento para o banco.Qual é melhor maneira de resoliver isso usando uma procedure ou uma view?Obrigado,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

Criei a seguinte Procedure para gerar o relatório, no entanto eu travei em erro aparentemente besta, eu não consigo rodar a procedure por que o SQL SERVER dá o seguinte erro Invalid column name 'situacao', quanto eu coloco veiculo.situacao aí aparece o seguinte erro The column prefix 'veiculo' does not match with a table name or alias name used in the query. A procedure encontra-se abaixo. Amigos pro favor me ajudem!

 

CREATE PROCEDURE [Pega2] (@v_ordem varchar(10), @v_datacorte datetime)ASBEGINDECLARE @v_aux int, @v_noestoque bit, @v_valovenda money, @v_placa varchar(7),@v_datacompra datetime, @v_situacao int SELECT Veiculo.Situacao as situacao,	   Veiculo.DataCompra,	   Veiculo_Marca.Descricao As Marca,	   Veiculo_Modelo.Descricao As Modelo,	   Veiculo_ModeloTipo.Descricao As Tipo,	   Veiculo_Combustivel.Descricao As Combustivel,	   Veiculo.Placa, Veiculo_Cor.Descricao As Cor,	   Veiculo.AnoModelo, Veiculo.ValorVenda,	   Veiculo.Acessorios,	   Veiculo.DataMovtoFROM  Veiculo  INNER JOIN  Veiculo_ModeloTipo On			  Veiculo.Marca = Veiculo_ModeloTipo.Marca And			  Veiculo.Modelo = Veiculo_ModeloTipo.Modelo And			  Veiculo.Tipo = Veiculo_ModeloTipo.Codigo  INNER JOIN  Veiculo_Modelo On			  Veiculo.Marca = Veiculo_Modelo.Marca And			  Veiculo.Modelo = Veiculo_Modelo.Codigo  INNER JOIN  Veiculo_Marca On			  Veiculo.Marca = Veiculo_Marca.Codigo  INNER JOIN  Veiculo_Cor On			  Veiculo.Cor = Veiculo_Cor.Codigo  INNER JOIN  Veiculo_Combustivel On			  Veiculo.Combustivel = Veiculo_Combustivel.CodigoOrder by CASE WHEN @v_ordem = 'Marca' THEN Veiculo.Marca			  WHEN @v_ordem = 'Modelo' THEN Veiculo.Modelo			  WHEN @v_ordem = 'AnoModelo' THEN Veiculo.AnoModelo			  ENDset @v_aux = (select count(*) from rel)  WHILE @v_aux < @v_aux	SET @v_noestoque = 0	IF veiculo.situacao = 2 AND datacompra < @v_datacorte	  BEGIN	   SET @v_noestoque = 1	   SET @v_placa = Placa	   SET @v_datacompra = DataCompra		END		  ELSE IF situacao <> 2 AND datacompra <> @v_datacorte		  EXECUTE compara @v_placa, @v_datacompra	   RETURNEND
Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Senhores,

 

Parece que consegui resolver o problema, no entanto minha solução está muito perto do que eu gostaria, mas a procedure não está retornando os registros que eu qquero será que alguem pode me ajudar?

 

CREATE PROCEDURE [Pega2] (@v_ordem varchar(10), @v_datacorte datetime)ASBEGINDECLARE @v_aux int, @v_noestoque bit, @v_valovenda money, @v_placa varchar(7),@v_datacompra datetimeDECLARE Cur_Buscacorte cursor for SELECT Veiculo.Situacao as situacao,	   Veiculo.DataCompra,	   Veiculo_Marca.Descricao As Marca,	   Veiculo_Modelo.Descricao As Modelo,	   Veiculo_ModeloTipo.Descricao As Tipo,	   Veiculo_Combustivel.Descricao As Combustivel,	   Veiculo.Placa, Veiculo_Cor.Descricao As Cor,	   Veiculo.AnoModelo, Veiculo.ValorVenda,	   Veiculo.Acessorios,	   Veiculo.DataMovtoFROM  Veiculo  INNER JOIN  Veiculo_ModeloTipo On			  Veiculo.Marca = Veiculo_ModeloTipo.Marca And			  Veiculo.Modelo = Veiculo_ModeloTipo.Modelo And			  Veiculo.Tipo = Veiculo_ModeloTipo.Codigo  INNER JOIN  Veiculo_Modelo On			  Veiculo.Marca = Veiculo_Modelo.Marca And			  Veiculo.Modelo = Veiculo_Modelo.Codigo  INNER JOIN  Veiculo_Marca On			  Veiculo.Marca = Veiculo_Marca.Codigo  INNER JOIN  Veiculo_Cor On			  Veiculo.Cor = Veiculo_Cor.Codigo  INNER JOIN  Veiculo_Combustivel On			  Veiculo.Combustivel = Veiculo_Combustivel.CodigoOrder by CASE WHEN @v_ordem = 'Marca' THEN Veiculo.Marca			  WHEN @v_ordem = 'Modelo' THEN Veiculo.Modelo			  WHEN @v_ordem = 'AnoModelo' THEN Veiculo.AnoModelo			  ENDOpen Cur_BuscacorteFETCH next from Cur_Buscacorte  WHILE @@FETCH_STATUS = 0  BEGIN	 SET @v_noestoque = 0	IF 'veiculo.situacao' = 2 AND 'veiculo.datacompra' < @v_datacorte	  BEGIN	   SET @v_noestoque = 1	   SET @v_placa = 'veiculo.Placa'	   SET @v_datacompra = 'veiculo.DataCompra'		END		  ELSE 		  EXECUTE compara @v_placa, @v_datacompra	   if 'veiculo.Situacao' = 1  break	 ENDCLOSE Cur_Buscacorte;DEALLOCATE Cur_Buscacorte;END

Obrigado,

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.