Fórum [Ajuda] Procedure com CTE #458851

18/10/2013

0

Boa Tarde,

Estou tentando criar uma proc aonde me retorna um select de uma CTE, porem me retorna apenas uma linha, sei que só irá mesmo retornar uma linha, como eu posso fazer para que me trouxesse todo o select?

Como ficaria minha sintaxe?

Abaixo a proc:

SET TERM ^;
CREATE PROCEDURE ABENDE_CLICK_5(
DATA_INI VARCHAR(7),
DATA_FIM VARCHAR(7))
RETURNS( 
METODO	VARCHAR(20),
SNQC	INTEGER)
AS
BEGIN
	FOR	
		  WITH CLICK5 AS
		  (
		  SELECT MOVTO_CERTIFICACAO.CODIGO_TECNICA AS "METODO", SUM(MOVTO_CERTIFICACAO.SOMA) AS "SNQC"        
			  FROM MOVTO_CERTIFICACAO        
			  WHERE	(MOVTO_CERTIFICACAO.STATUS = 'I1')  AND (MOVTO_CERTIFICACAO.DATA >= :DATA_INI)  AND 
					  (MOVTO_CERTIFICACAO.DATA <= :DATA_FIM )         
			  GROUP BY MOVTO_CERTIFICACAO.CODIGO_TECNICA
		  UNION
		  SELECT MOVTO_CERTIFICACAO.CODIGO_TECNICA AS "METODO", SUM(MOVTO_CERTIFICACAO.SOMA) AS "SNQC"        
			  FROM MOVTO_CERTIFICACAO        
			  WHERE 	(MOVTO_CERTIFICACAO.STATUS = 'I2')  AND (MOVTO_CERTIFICACAO.DATA >= :DATA_INI)  AND 
					  (MOVTO_CERTIFICACAO.DATA <= :DATA_FIM)         
			  GROUP BY MOVTO_CERTIFICACAO.CODIGO_TECNICA
		  UNION
		  SELECT MOVTO_CERTIFICACAO.CODIGO_TECNICA AS "METODO", SUM(MOVTO_CERTIFICACAO.SOMA) AS "SNQC"        
			  FROM MOVTO_CERTIFICACAO        
			  WHERE 	(MOVTO_CERTIFICACAO.STATUS = 'I3')  AND (MOVTO_CERTIFICACAO.DATA >= :DATA_INI)  AND 
					  (MOVTO_CERTIFICACAO.DATA <= :DATA_FIM)         
			  GROUP BY MOVTO_CERTIFICACAO.CODIGO_TECNICA
		  UNION
		  SELECT MOVTO_CERTIFICACAO.CODIGO_TECNICA AS "METODO", SUM(MOVTO_CERTIFICACAO.SOMA) AS "SNQC"        
			  FROM MOVTO_CERTIFICACAO        
			  WHERE 	(MOVTO_CERTIFICACAO.STATUS = 'I4')  AND (MOVTO_CERTIFICACAO.DATA >= :DATA_INI)  AND 
					  (MOVTO_CERTIFICACAO.DATA <= :DATA_FIM)         
		  GROUP BY MOVTO_CERTIFICACAO.CODIGO_TECNICA
		  )
          SELECT
			  METODO, SUM(SNQC) AS "SNQC"
		  FROM CLICK5
			  GROUP BY METODO            
          INTO :METODO, :SNQC
	DO
			BEGIN
            	SUSPEND;
			END
END^
SET TERM ;^



Obrigado!
Israel Souza

Israel Souza

Responder

Posts

18/10/2013

Alex Lekao

Ola Israel, boa tarde!!!

Nao conheco muito bem procedures, mas se vc retirar da CTE nao resolveria?

Rescreva por exemplo o codigo sem aquele Witch alguma coisa, e veja se funciona.

Espero ter ajudado.

Abraco.

Alex - Lekao
Responder

Gostei + 0

18/10/2013

Israel Souza

Boa Tarde, Alex!

Na verdade com a CTE esta funcionando, porem traz apenas uma linha, se tirar a CTE já não fica dentro do q eu espero no select.

Obrigado!
Responder

Gostei + 0

18/10/2013

Deivison Melo

Compare sua procedure com a procedure abaixo e veja quais as diferenças entre elas!

Essa está correta e trás a quantidade de linhas que estiver de acordo com o campo lateral (parâmetro informado).

SET TERM ^ ;

create or alter procedure SP_RETORNA_TAM_CAMPOS (
    TAB varchar(60))
returns (
    TABELA varchar(31),
    CAMPO varchar(31),
    TAMANHO smallint)
as
BEGIN
  FOR
    SELECT
        B.RDB$RELATION_NAME TABELA,
        B.RDB$FIELD_NAME CAMPO,
        A.RDB$FIELD_LENGTH TAMANHO
    FROM RDB$FIELDS A,
         RDB$RELATION_FIELDS B
    WHERE RDB$RELATION_NAME = :TAB
      AND A.RDB$FIELD_NAME = B.RDB$FIELD_SOURCE
    INTO :TABELA,
         :CAMPO,
         :TAMANHO
  DO
  BEGIN
    SUSPEND;
  END
END^

SET TERM ; ^

GRANT EXECUTE ON PROCEDURE SP_RETORNA_TAM_CAMPOS TO SYSDBA;


PS. Caso não conseguir, por favor, postar a estrutura de todas as tabelas usadas em sua procedure e o código da sua procedure ou apenas o sql que deseja usar para que possa confeccionar sua procedure.

Abração e bons códigos!!
Responder

Gostei + 0

19/10/2013

Alex Lekao

Boa Tarde, Alex!

Na verdade com a CTE esta funcionando, porem traz apenas uma linha, se tirar a CTE já não fica dentro do q eu espero no select.

Obrigado!


Oi Israel, bom dia!!!

Blz,

agora que o Deivison entrou na jogada vc sera melhor assistido.

Abraco.

Alex - Lekao
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar