Boa noite a todos.
Pessoal estou trabalhando a pouco tempo com plsql,gostaria de saber como utilizar os famosos cursores implicitos aninhados.
já procurei no forum informações e só encontrei algumas dicas sobre o tema,porem avançadas para quem ainda não entendo o funcionamento do mesmos e em varios materiais o assunto é muito pouco abordado.
A risca da explicação poderia ser mais ou menos conforme abaixo:
begin
for i in ( select *
from employees )loop
for j in (select *
from departments) loop
end;
end;
já vi muito esse tipo de cursores em funções e procedimentos porem não consegui entender muito bem.Sei que as vezes usamos para fazer joins.
Caso tenha algum tópico sobre este assunto abordando o mesmo de forma basica,favor desconsiderar esse tópico.
Obrigado.
Duvida sobre cursores implicitos
Pessoal postei o código acima e esqueci de finalizar os dois laços.
faltou a finalização dos dois loops,o codigo ficaria assim:
begin
for i in (select *
from employees)loop
for jin (select
* from departments)loop
end loop; //finaliza loop interno
end loop; //finaliza loop externo
end;
faltou a finalização dos dois loops,o codigo ficaria assim:
begin
for i in (select *
from employees)loop
for jin (select
* from departments)loop
end loop; //finaliza loop interno
end loop; //finaliza loop externo
end;
- fsitja
- Rank: OraSauro
- Mensagens: 611
- Registrado em: Seg, 19 Jan 2009 4:29 pm
- Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Geralmente quando se vê o código com dois loops como você citou:
Provavelmente a intenção era fazer a junção das duas tabelas. Se for mesmo, o melhor é não aninhar loops, e sim fazer o join no próprio select do cursor:
Onde coloquei "sua lógica", dependendo do que você precisa fazer, é bem possível que a melhor forma de realizar essa lógica seja no próprio Select. Ou seja: o melhor que você pode fazer é não usar cursor, e tentar resolver tudo num insert/update/delete ou numa sequência de inserts/updates/deletes sem loops.
BEGIN
FOR i IN (SELECT * FROM employees)
LOOP
FOR jin IN (SELECT * FROM departments)
LOOP
-- sua lógica
END LOOP;
END LOOP;
END;
BEGIN
FOR i IN (SELECT *
FROM employees e
JOIN departments d ON e.department_id = employees.department_id)
LOOP
-- sua lógica
END LOOP;
END;
Boa tarde,
Obrigado pela explicação.Infelizmente nem sempre da pra fucgir da utilização dos cursores.
Pode fechar o tópico.
Obrigado.
Obrigado pela explicação.Infelizmente nem sempre da pra fucgir da utilização dos cursores.
Pode fechar o tópico.
Obrigado.

-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante