Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

PL SQL (Select dentro do LOOP)

e2cfcdee-4ed4-4a34-8d9b-1f54207bdc26Jul 1 2019 — edited Jul 3 2019

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]

Comments
Post Details
Added on Jul 1 2019
6 comments
882 views