DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da SQL Magazine DIGITAL ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!


Artigo SQL Magazine 35 - Árvores em PL/pgSQL - SQL recursivo para busca em estruturas hierárquicas

Artigo da Revista SQL Magazine - Edição 35.

capaSQL12.JPG

Clique aqui para ler todos os artigos desta edição

Árvores em PL/pgSQL - SQL recursivo para busca em estruturas hierárquicas

 

Neste artigo faremos uso da linguagem procedural PL/pgSQL para implementar uma busca hierárquica via SQL recursivo no PostgreSQL. Estruturas organizacionais (departamentos, sub-departamentos, e assim por diante - ver Figura 1), fóruns de discussão (mensagem, resposta, resposta da resposta), listas de materiais em manufatura (bill of material), classificações de produtos, disciplinas acadêmicas e seus pré-requisitos, e hierarquias de documentos são alguns exemplos de informações organizadas de forma hierárquicas.

 

Figura 1. Organograma departamental: exemplo de informações organizadas em hierarquia.

 

As instruções SQL contidas neste artigo foram executadas utilizando a ferramenta pgAdmin III (www.pgadmin.org), que já vem instalada com o PostgreSQL 8.1 no Windows e é facilmente instalada no Linux, FreeBSD ou Mac OS X. Além disso, estas instruções funcionam em qualquer aplicativo cliente do PostgreSQL, como psql, phpPgAdmin ou PgAccess, e em qualquer plataforma. Portanto, use a ferramenta que achar mais conveniente.

No pgAdmin, selecione o banco de dados desejado e acesse o menu Tools, Query Tool. Será aberta a janela para execução das instruções. Digite-as na área de texto e acesse o menu Query, Execute ou simplesmente pressione F5 para executá-las. Para mais informações sobre o funcionamento da ferramenta, consulte a documentação online (http://www.pgadmin.org/docs/1.4/using.html).

 

Linguagens procedurais no PostgreSQL

Assim como temos a PL/SQL no Oracle, ou a TransactSQL no SQL Server, o PostgreSQL também possui uma linguagem procedural. Na realidade, ele possui várias! Nativamente, funções definidas pelo usuário (UDFs) no PostgreSQL podem ser criadas em SQL ou em C (para os que não têm medo de ponteiros).

O que quase ninguém sabe é que podemos criar funções no PostgreSQL em qualquer linguagem procedural, pois elas não são embutidas no servidor. Ao invés disso, estas são oferecidas através de módulos carregáveis. Assim, a tarefa de interpretar o código-fonte de um procedimento armazenado fica por conta de um handler, uma função especial escrita em C que conhece todos os detalhes da linguagem em questão. Funciona como uma ponte entre a implementação da linguagem específica e o servidor do PostgreSQL (também chamado de postmaster). Esse handler é compilado na forma de uma biblioteca compartilhada (DLL no Windows ou SO no Linux), e é carregado sob demanda.

Como são executadas no servidor, algumas linguagens são marcadas como não-confiáveis (untrusted), pois dependendo dos privilégios do usuário, uma função escrita nela poderia executar comandos críticos do sistema operacional. Porém, existem linguagens que possuem ambas as implementações: confiável e não-confiável. Por exemplo, funções em Perl podem ser criadas com as linguagens ‘plperl’ e ‘plperlu’ (o sufixo “u” indica a não-confiabilidade).

Assim, com essa estrutura do PostgreSQL, podemos criar funções (stored procedures) ou gatilhos (triggers) em qualquer linguagem. Se esta não existir, somos livres para criar um handler. Na Tabela 1 são listadas as linguagens já existentes para o PostgreSQL. Algumas não são disponibilizadas com o core do PostgreSQL, porém encontram-se em módulos opcionais.

 

Tabela 1. Linguagens procedurais existentes no PostgreSQL.

 

A linguagem procedural SQL (‘sql’) é extremamente simples e limitada. Já a linguagem em C (‘c’) é poderosa, porém de difícil construção e manutenção. A linguagem mais utilizada e que é considerada análoga às soluções comerciais é a PL/pgSQL (‘plpgsql’). É nela em que serão apresentados os exemplos deste artigo.

Segundo a documentação oficial do PostgreSQL, os objetivos do projeto da PL/pgSQL foram criar uma linguagem procedural carregável que:

·         "



ATENÇÃO! A exibição deste artigo foi interrompida.


  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da SQL Magazine DIGITAL ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!






    0 COMENTÁRIO

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


Nenhum comentário foi postado - seja o primeiro a comentar!



Publicidade
Autor
Equipe Devmedia

Noticias/Dicas/Artigos publicados.




Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
0   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03