Tem como unir resultados com EXECUTE BLOCK RETURNS
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.
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
Curtidas 0
Respostas
Frank Hosaka
21/01/2023
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
GOSTEI 0