Fórum [Ajuda] Procedure com CTE #458851
18/10/2013
0
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
Curtir tópico
+ 0Posts
18/10/2013
Alex Lekao
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
Gostei + 0
18/10/2013
Israel Souza
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!
Gostei + 0
18/10/2013
Deivison Melo
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!!
Gostei + 0
19/10/2013
Alex Lekao
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)