Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde galera, sou iniciante em plsql e gostaria de saber por que apesar do cursor CRS_ENDERECOS estar dentro do loop o parâmetro CLIENTE.ID é sempre o mesmo passado no cursor[CRS_ENDERECOS]? Como faço para resolver esse problema? O que não consigo entender é que na saida do output ele não repete, não é sempre mesmo, não consigo entender rs Acredito que seja algum bem simples, e eu estou penando para resolver esse probleminha rs. DECLARE
VALOR CLIENTE.NOME%TYPE. CURSOR CRS_CLIENTES IS SELECT * FROM CLIENTE. SELECT NUMERO FROM ENDERECO WHERE ENDERECO.CLIENTE_ID=CLIENTE_ID. VL ENDERECO.NUMERO%TYPE. BEGIN FOR CLIENTE IN CRS_CLIENTES LOOP OPEN CRS_ENDERECOS(CLIENTE.ID). FETCH CRS_ENDERECOS INTO VL. DBMS_OUTPUT.put_line('ID: '|| CLIENTE.ID || ' Nome: ' || CLIENTE.NOME || ' NUMERO: ' || VL). CLOSE CRS_ENDERECOS. END LOOP. END. END. flw:)@Motta por quê sendo q o cursor CRS_ENDERECOS apenas retorna um registro ou uma row ?
Isso que gostaria de saber, eu não consigo entender.
Como você recomendou criei um segundo loop porem agora para o cursor CRS_ENDERECOS, a consulta está duplicando, tem ideia do por quê?
DECLARE
VALOR CLIENTE.NOME%TYPE;
CURSOR CRS_CLIENTES IS
SELECT * FROM CLIENTE;DECLARE
CURSOR CRS_ENDERECOS(CLIENTE_ID NUMBER) IS
SELECT NUMERO FROM ENDERECO
WHERE ENDERECO.CLIENTE_ID=CLIENTE_ID;
VL ENDERECO.NUMERO%TYPE;
BEGIN
FOR CLIENTE IN CRS_CLIENTES LOOP
FOR ENDERECO IN CRS_ENDERECOS(CLIENTE.ID) LOOP
DBMS_OUTPUT.put_line('ID: '|| CLIENTE.ID || ' Nome: ' || CLIENTE.NOME || ' NUMERO: ' || ENDERECO.NUMERO);
END LOOP;
END LOOP;
END;
END;
Alguma ideia do por que está duplicando ?
vlw
DECLARE
VALOR CLIENTE.NOME%TYPE;
;
BEGIN
FOR RC IN (SELECT * FROM CLIENTE)
LOOP
FOR RE IN (SELECT NUMERO
FROM ENDERECO
WHERE ENDERECO.CLIENTE_ID=RC.CLIENTE_ID)
LOOP
-- FAZ O QUE DE FAZER
END LOOP;
END LOOP;
END;>
DECLARE
VALOR CLIENTE.NOME%TYPE;
; FOR RC IN (SELECT * FROM CLIENTE)
LOOP
FOR RE IN (SELECT NUMERO
FROM ENDERECO
WHERE ENDERECO.CLIENTE_ID=RC.CLIENTE_ID)
LOOP
-- FAZ O QUE DE FAZER
END LOOP;
END LOOP;
END;Não teria de analisar o código , uso o for pois é mais simples, mas requer cuidados para tabelas muito grandes.
Vc precisa de 2 for
For para clientes
____For para enderecos