Tem como unir resultados com EXECUTE BLOCK RETURNS

21/01/2023

0

Boa tarde sou bem novo em SQL e estou com vários select com "EXECUTE BLOCK RETURNS" gostaria de saber se tem como unir com UNION os resultados vou postar os 2 select que preciso unir que na verdade tem vários que vou precisar unir, mas se tiver como unior esse 2, eu consigo fazer no restante, ah e é o firebird 2.5

Select 1

-- MATRIZ

EXECUTE BLOCK RETURNS (
EMPRESA VARCHAR(30),
INDICADOR VARCHAR(30),
PEDIDO INT,
EMISSAO DATE,
MATERIAL VARCHAR(100),
NOME VARCHAR(100),
UN VARCHAR(30),
SEQ VARCHAR(30),
CHAVE VARCHAR(30),
DESCRICAO_CHAVE VARCHAR(100),
QTD DECIMAL(15,2))

AS DECLARE VARIABLE ID_PEDIDO INT;

BEGIN
FOR

/* FILTRO PEDIDOS NAO ATENDIDOS MATRIZ */

WITH
RESULT1 AS (SELECT DISTINCT P.ID_PEDIDO,PEDDTEMIS,AP.APCODIGO,LP.LPCODIGO FROM
PEDID P
LEFT JOIN ACOPED AP ON AP.ID_PEDIDO= P.ID_PEDIDO
LEFT JOIN LOCALPED LP ON LP.LPCODIGO = AP.LPCODIGO
WHERE

/* DATES */

PEDDTEMIS >=
DATEADD(-7 DAY TO CURRENT_DATE) AND PEDDTEMIS < 'TODAY'
--------------------------------------

AND P.EMPCODIGO=1
AND TPCODIGO IN (1,2,3,6,7,12,14)
AND PEDSITPED IN ('A','F'))

SELECT DISTINCT R.ID_PEDIDO
FROM RESULT1 R
WHERE
R.ID_PEDIDO > 0
AND R.APCODIGO = (SELECT MAX(APCODIGO) FROM ACOPED APO
LEFT JOIN LOCALPED LP2 ON APO.LPCODIGO = LP2.LPCODIGO
WHERE APO.ID_PEDIDO = R.ID_PEDIDO )
AND EXISTS (SELECT 1 FROM ACOPED ACP WHERE ACP.ID_PEDIDO= R.ID_PEDIDO AND ACP.LPCODIGO = 69)
AND NOT EXISTS (SELECT 1 FROM ACOPED ACP WHERE ACP.ID_PEDIDO= R.ID_PEDIDO AND ACP.LPCODIGO = 1805 )
AND NOT EXISTS (SELECT 1 FROM ACOPED ACP WHERE ACP.ID_PEDIDO= R.ID_PEDIDO AND ACP.LPCODIGO = 1847 )

INTO :ID_PEDIDO
DO
BEGIN
FOR

/* FILTRO PEDIDOS NAO ATENDIDOS MATRIZ */

WITH PED AS (SELECT ID_PEDIDO,PEDDTEMIS FROM PEDID WHERE ID_PEDIDO=:ID_PEDIDO),

PROD AS (SELECT PROCODIGO,PRODESCRICAO,IIF(PROCODIGO2 IS NULL, PROCODIGO,PROCODIGO2)CHAVE FROM PRODU WHERE PROSITUACAO='A' AND PROTIPO NOT IN ('T','M','S','C'))


SELECT
'MATRIZ' EMPRESA,
'PEDIDOS NAO ATENDIDOS' INDICADOR,
ID_PEDIDO,
(SELECT PEDDTEMIS FROM PEDID WHERE ID_PEDIDO=:ID_PEDIDO) EMISSAO ,
RP.PROCODIGO MATERIAL ,
RP.RQPDESCRICAO NOME ,
PD.PROUN UN ,
RQPSEQ,
PD.PROCODIGO2 CHAVE,
(SELECT DISTINCT PRODESCRICAO FROM PRODU WHERE PROCODIGO=PD.PROCODIGO2) DESCRICAO_CHAVE,
RP.RQPQTDADE QTD
FROM PEDCELPDCAO PCP
LEFT JOIN PDCAO PDC ON PCP.PDCCODIGO = PDC.PDCCODIGO AND PCP.EMPPDCCODIGO = PDC.EMPCODIGO
LEFT JOIN REQUI REQ ON PDC.PDCCODIGO = REQ.PDCCODIGO AND PDC.EMPCODIGO = REQ.EMPCODIGO
LEFT JOIN REQPRO RP ON RP.REQCODIGO = REQ.REQCODIGO AND RP.EMPCODIGO = REQ.EMPCODIGO
INNER JOIN (SELECT PROCODIGO,PROCODIGO2,PRODESCRICAO,PROUN FROM PRODU WHERE PROTIPO NOT IN ('T','S')) PD ON PD.PROCODIGO = RP.PROCODIGO

WHERE
PCP.ID_PEDIDO = :ID_PEDIDO AND
RP.PROCODIGO IS NOT NULL UNION

SELECT
'MATRIZ' EMPRESA,
'PEDIDOS NAO ATENDIDOS' INDICADOR,
PRD.ID_PEDIDO,
(SELECT PEDDTEMIS FROM PEDID WHERE ID_PEDIDO=:ID_PEDIDO) EMISSAO ,
PRD.PROCODIGO MATERIAL ,
PDPDESCRICAO NOME ,
(SELECT DISTINCT PROUN FROM PRODU WHERE PROCODIGO=CHAVE ) UN,
'' RQPSEQ,
CHAVE CHAVE,
(SELECT PRODESCRICAO FROM PRODU WHERE PROCODIGO=CHAVE ) DESCRICAO_CHAVE,
PRD.PDPQTDADE QTD
FROM PDPRD PRD
INNER JOIN PED ON PRD.ID_PEDIDO=PED.ID_PEDIDO
INNER JOIN PROD P ON PRD.PROCODIGO=P.PROCODIGO

INTO :EMPRESA,:INDICADOR,:PEDIDO,:EMISSAO, :MATERIAL,:NOME, :UN, :SEQ,:CHAVE, :DESCRICAO_CHAVE,:QTD

DO BEGIN

SUSPEND;

END
END
END


Select 2



-- CONTROL

EXECUTE BLOCK RETURNS (
EMPRESA VARCHAR(30),
INDICADOR VARCHAR(30),
PEDIDO INT,
EMISSAO DATE,
MATERIAL VARCHAR(100),
NOME VARCHAR(100),
UN VARCHAR(30),
SEQ VARCHAR(30),
CHAVE VARCHAR(30),
DESCRICAO_CHAVE VARCHAR(100),
QTD DECIMAL(15,2))

AS DECLARE VARIABLE ID_PEDIDO INT;

BEGIN
FOR

/* FILTRO PEDIDOS CONTROL */

SELECT DISTINCT
PE.ID_PEDIDO
FROM PEDID PE
WHERE

/* DATES */

PEDDTEMIS >=
DATEADD(-7 DAY TO CURRENT_DATE) AND PEDDTEMIS < 'TODAY'
--------------------------------------

AND PE.PEDSITPED IN ('A','F')
AND PE.CLICODIGO IN (495,1065,81,5) AND PE.TPCODIGO IN ('10','11')
AND EXISTS (SELECT 1 FROM PEDROTEIRO PR1 WHERE PR1.ALXCODIGO = 1 AND PR1.ID_PEDIDO = PE.ID_PEDIDO)
AND NOT EXISTS (SELECT 1 FROM PEDROTEIRO PR2 WHERE PR2.ALXCODIGO IN ('15','16','10','9','38','40','6')
AND PR2.ID_PEDIDO = PE.ID_PEDIDO)

INTO :ID_PEDIDO
DO
BEGIN
FOR

/* LENTES COM PRODUCAO */

WITH PED AS (SELECT ID_PEDIDO,CLICODIGO PEDDTEMIS FROM PEDID WHERE ID_PEDIDO=:ID_PEDIDO),

PROD AS (SELECT PROCODIGO,PRODESCRICAO,IIF(PROCODIGO2 IS NULL, PROCODIGO,PROCODIGO2)CHAVE FROM
PRODU WHERE PROSITUACAO='A' AND PROTIPO NOT IN ('T','M','S','C'))

SELECT
(SELECT CASE
WHEN CLICODIGO=495 THEN 'JOINVILLE'
WHEN CLICODIGO=1065 THEN 'CRICIUMA'
WHEN CLICODIGO=81 THEN 'CHAPECO'
WHEN CLICODIGO=5 THEN 'BALNEARIO C'
END FROM PEDID WHERE ID_PEDIDO=:ID_PEDIDO) EMPRESA,
'PEDIDOS CONTROL FILIAIS' INDICADOR,
ID_PEDIDO,
(SELECT PEDDTEMIS FROM PEDID WHERE ID_PEDIDO=:ID_PEDIDO) EMISSAO ,
RP.PROCODIGO MATERIAL ,
RP.RQPDESCRICAO NOME ,
PD.PROUN UN,
RQPSEQ,
PD.PROCODIGO2 CHAVE,
(SELECT DISTINCT PRODESCRICAO FROM PRODU WHERE PROCODIGO=PD.PROCODIGO2) DESCRICAO_CHAVE,
RP.RQPQTDADE QTD
FROM PEDCELPDCAO PCP
LEFT JOIN PDCAO PDC ON PCP.PDCCODIGO = PDC.PDCCODIGO AND PCP.EMPPDCCODIGO = PDC.EMPCODIGO
LEFT JOIN REQUI REQ ON PDC.PDCCODIGO = REQ.PDCCODIGO AND PDC.EMPCODIGO = REQ.EMPCODIGO
LEFT JOIN REQPRO RP ON RP.REQCODIGO = REQ.REQCODIGO AND RP.EMPCODIGO = REQ.EMPCODIGO
INNER JOIN (SELECT PROCODIGO,PROCODIGO2,PRODESCRICAO,PROUN FROM PRODU WHERE PROTIPO NOT IN ('T','S')) PD ON PD.PROCODIGO = RP.PROCODIGO

WHERE
PCP.ID_PEDIDO = :ID_PEDIDO AND
RP.PROCODIGO IS NOT NULL

UNION

/* SELECIONA LENTES ACABADAS */

SELECT

(SELECT CASE
WHEN CLICODIGO=495 THEN 'JOINVILLE'
WHEN CLICODIGO=1065 THEN 'CRICIUMA'
WHEN CLICODIGO=81 THEN 'CHAPECO'
WHEN CLICODIGO=5 THEN 'BALNEARIO C'
END FROM PEDID WHERE ID_PEDIDO=:ID_PEDIDO) EMPRESA,

'PEDIDOS CONTROL' INDICADOR,
PRD.ID_PEDIDO,
(SELECT PEDDTEMIS FROM PEDID WHERE ID_PEDIDO=:ID_PEDIDO) EMISSAO ,
PRD.PROCODIGO MATERIAL ,
PDPDESCRICAO NOME ,
(SELECT DISTINCT PROUN FROM PRODU WHERE PROCODIGO=CHAVE ) UN,
'' RQPSEQ,
CHAVE CHAVE,
(SELECT PRODESCRICAO FROM PRODU WHERE PROCODIGO=CHAVE ) DESCRICAO_CHAVE,
PRD.PDPQTDADE QTD
FROM PDPRD PRD
INNER JOIN PED ON PRD.ID_PEDIDO=PED.ID_PEDIDO
INNER JOIN PROD P ON PRD.PROCODIGO=P.PROCODIGO

INTO :EMPRESA,:INDICADOR,:PEDIDO,:EMISSAO, :MATERIAL,:NOME,:UN,:SEQ,:CHAVE, :DESCRICAO_CHAVE,:QTD

DO BEGIN

SUSPEND;

END
END
END


os resultados estão saindo corretamente mais não estou conseguindo unir eles.
Paulo Segatto

Paulo Segatto

Responder

Posts

22/01/2023

Frank Hosaka

Eu não tenho Execute Blocks no MySQL, até onde eu sei o MySQL só usa o Execute no final assim:

CREATE DEFINER=`root`@`localhost` PROCEDURE `procedimento`()
begin
set @comando:="select * from tbpedidos where status=''não atendidos'' order by empresa, data";
prepare myquery from @comando;
execute myquery;
end
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar