I would like to be able to do a SELECT within the LOOP equal to the example below.
***Moderator action (Timo):
User, please post your question in English language as this is the language of the space.
***
TRANSLATION via Google:
This example did not work, if you take this SELECT that is inside the LOOP, everything works. The problem is in the Select within the LOOP that does not accept.
ORA-01403: data not found
Does anyone know any way to do what I need?
------------------ ORIGINAL MESSAGE----------------
Gostaria de poder fazer um SELECT dentro do LOOP igual ao exemplo abaixo.
Esse exemplo não deu certo, se tirar esse SELECT que está dentro do LOOP, tudo funciona. O problema está no Select dentro do LOOP que nao aceita.
ORA-01403: dados não encontrados
Alguem sabe alguma maneira de fazer o que preciso ?
[code=sql]
DECLARE
v_CODCLI VARCHAR2 (6);
vPREFIXO VARCHAR2 (3);
vNUM VARCHAR2 (9);
vPARCELA VARCHAR2 (3);
BEGIN
v_CODCLI := '0';
FOR V_FUNC IN
(
SELECT E1_FILIAL, A1_COD, A1_LOJA, A1_PESSOA, E1_PREFIXO, E1_NUM, E1_PARCELA, E1_TIPO, E1_NATUREZ, E1_EMISSAO, E1_VENCREA, E1_VALOR,
CASE WHEN TO_DATE('20190627', 'yyyymmdd') - TO_DATE(E1_VENCTO, 'yyyymmdd') < 0
THEN 0
ELSE TO_DATE('20190627', 'yyyymmdd') - TO_DATE(E1_VENCTO, 'yyyymmdd') END ATRASO
FROM SE1010 SE1
INNER JOIN SA1010 A1 ON A1.A1_COD = E1_CLIENTE AND A1_LOJA = E1_LOJA AND A1.D_E_L_E_T_ = SE1.D_E_L_E_T_
WHERE SE1.D_E_L_E_T_ = ' '
ORDER BY A1_LOJA, A1_COD
)
LOOP
SELECT Z46_PREFIX, Z46_NUM, Z46_PARCEL, Z46_TIPO, Z46_NATURE
INTO vPREFIXO, vNUM, vPARCELA, vTIPO, vNATUREZ
FROM DADOSADV.Z46010 Z46
WHERE
Z46_PREFIX = V_FUNC.E1_PREFIXO
AND Z46_NUM = V_FUNC.E1_NUM
AND Z46_PARCEL = V_FUNC.E1_PARCELA
AND D_E_L_E_T_ = ' ' ;
IF vPREFIXO || vNUM || vPARCELA != V_FUNC.E1_PREFIXO || V_FUNC.E1_NUM || V_FUNC.E1_PARCELA THEN
IF V_FUNC.A1_COD <> v_CODCLI THEN
v_CODCLI := V_FUNC.A1_COD;
INSERT
INTO DADOSADV.Z45010
(
Z45_RECNO,
Z45_FILIAL,
Z45_CODCLI,
Z45_LOJA,
Z45_PESSOA,
Z45_DTCAD
)
VALUES
(
(SELECT CASE WHEN MAX(Z45_RECNO) IS NULL THEN 1 ELSE MAX(Z45_RECNO) + 1 END Z45_RECNO FROM DADOSADV.Z45010) ,
V_FUNC.E1_FILIAL,
V_FUNC.A1_COD,
V_FUNC.A1_LOJA,
V_FUNC.A1_PESSOA,
TO_CHAR(SYSDATE, 'YYYYMMDD')
);
COMMIT;
END IF;
INSERT
INTO DADOSADV.Z46010
(
Z46_RECNO,
Z46_RECZ45,
Z46_STATIT,
Z46_PREFIX,
Z46_NUM,
Z46_PARCEL,
Z46_TIPO,
Z46_NATURE,
Z46_VALOR,
Z46_ATRASO,
Z46_DTCAD
)
VALUES
(
(SELECT CASE WHEN MAX(Z46_RECNO) IS NULL THEN 1 ELSE MAX(Z46_RECNO) + 1 END Z46_RECNO FROM DADOSADV.Z46010) ,
(SELECT CASE WHEN MAX(Z45_RECNO) IS NULL THEN 1 ELSE MAX(Z45_RECNO) END Z45_RECNO FROM DADOSADV.Z45010),
0,
V_FUNC.E1_PREFIXO,
V_FUNC.E1_NUM,
V_FUNC.E1_PARCELA,
V_FUNC.E1_TIPO,
V_FUNC.E1_NATUREZ,
20,
V_FUNC.ATRASO,
TO_CHAR(SYSDATE, 'YYYYMMDD')
);
COMMIT;
END IF;
END LOOP;
END;
[/code]