quarta-feira, 25 de maio de 2011

Oracle Connect By Prior (Pra que serve?)

Olá,

Hoje vou falar sobre um recurso muito bacana e que às vezes não é explorado pelos programadores Oracle, esse recurso é o connect by prior.

O connect by prior serve para montar uma query com uma árvore recursiva, muito devem estar se perguntando, mas qual a utilidade disso?

A utilidade é quando temos, por exemplo, que listar qual funcionario está abaixo de quem.. Vou por um exemplo de código que acho que fica mais claro...

Primeiro vou criar uma tabela de funcionarios...

create table funcionarios( cod_funcionario NUMBER not null, cod_superior NUMBER, nome VARCHAR2(20) )

Crio a PK

alter table funcionarios constraint PK_funcionarios primary key (cod_funcionario)

E a FK informando que um superior é um funcionario

alter table funcionarios add constraint FK_funcionarios foreign key (cod_superior) references funcionarios (cod_funcionario)

Agora vamos ao select...

select cod_funcionario, cod_superior, level, nome
from funcionarios
start with cod_superior is null
connect by prior cod_funcionario = cod_superior
order by level

Esse select retorna todos os funcionarios da empresa, do presidente ( que não tem superior ) até os funcionarios que não tem subordinados... Não esquecer de fazer o insert na tabela, lembrando que no nosso caso, pelo menos um funcionário, não deve ter superior

Essa funcionalidade já me quebrou vários galhos..rs, principalmente na criação de menus no Oracle Forms e nos controles de acessos

E o melhor de tudo, é grátis...rs.. Bom, na verdade ele vem com o Oracle, que não é de graça ...rs

Até,

Um comentário:

Paulo Gomes disse...

Maravilha amigo, show de bola mesmo. Uma coisa que com certeza poucos conhecem.