Acesso direto ao conteúdo
Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Aprenda inglês de uma vez por todas

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

PL PGSQL Programando no PostgreSql Usando Recursividade

Colaboração: Marlon Luis Petry

Data de Publicação: 13 de August de 2008

Postgresql suporta uma variedade de linguagens procedurais, podemos programar uma store procedure na linguagens de nossa preferência como exemplos: Pl/Perl, Pl/Python, Pl/Java, Pl/PHP, Pl/Ruby e muitas outras. Para utilizar estas linguagens primeiro é necessário habilitar na base de dados.

O comando para habilitar a linguagem na base de dados não é complicado. Nesse post iremos utilizar a linguagem nativa do PostgreSQL que PL/PGSQL.

Habilitando a linguagem em uma bases de dados.

  create lang plpgsql nomedabasededados

Por exemplo na base de dados book

  create lang plpgsql book

Este comando deve ser executado no shell.

O exemplo tem a finalidade de mostrar o poder de um procedimento armazenado (store procedure) da linguagem PL/PGSQL está linguagem somente irá atuar dentro da base de dados, então não será possível executar comandos externos. Caso seja necessário é possível desenvolver uma função externa em C ou usar uma linguagem procedural não confiável a qual pode inserir algum risco de segurança a base de dados.

Voltando ao exemplo vamos desenvolver o algoritmo da torre de hanoi em PL/PGSQL.

  view plaincopy to clipboardprint?
  
  1. CREATE FUNCTION towerHanoi(ndisk INTEGER,src INTEGER,dst INTEGER, tmp INTEGER) RETURNS void AS '
  2. Declare
  3.
  4. BEGIN
  5.     IF ndisk = 1 THEN
  6.         RAISE NOTICE '' DISK % Move da haste % para haste % '', ndisk,src,dst;
  7.     ELSE
  8.         perform towerHanoi(ndisk - 1,src,dst,tmp);
  9.         RAISE NOTICE '' DISK % Move da haste % para haste % '', ndisk,src,tmp;
  10.         perform towerHanoi(ndisk - 1,src,tmp,src);
  11.     END IF;
  12.
  13. END;
  14. ' LANGUAGE 'plpgsql';
  
  CREATE FUNCTION towerHanoi(ndisk INTEGER,src INTEGER,dst INTEGER, tmp INTEGER) RETURNS void AS '
  Declare
  
  BEGIN
  IF ndisk = 1 THEN
  RAISE NOTICE '' DISK % Move da haste % para haste % '', ndisk,src,dst;
  ELSE
  perform towerHanoi(ndisk - 1,src,dst,tmp);
  RAISE NOTICE '' DISK % Move da haste % para haste % '', ndisk,src,tmp;
  perform towerHanoi(ndisk - 1,src,tmp,src);
  END IF;
  
  END;
  ' LANGUAGE 'plpgsql';

Executando a função

  select towerHanoi(3,1,2,3);

Veja o resultado da função

  NOTA: DISK 1 Move da haste 1 para haste 2
  CONTEXT: comando SQL  SELECT towerHanoi( $1 - 1, $2 , $3 , $4 )
  PL/pgSQL function  towerhanoi  line 7 at perform
  comando SQL  SELECT towerHanoi( $1 - 1, $2 , $3 , $4 )
  PL/pgSQL function  towerhanoi  line 7 at perform
  NOTA: DISK 2 Move da haste 1 para haste 3
  CONTEXT: comando SQL  SELECT towerHanoi( $1 - 1, $2 , $3 , $4 )
  PL/pgSQL function  towerhanoi  line 7 at perform
  NOTA: DISK 1 Move da haste 1 para haste 3
  CONTEXT: comando SQL  SELECT towerHanoi( $1 - 1, $2 , $3 , $2 )
  PL/pgSQL function  towerhanoi  line 9 at perform
  comando SQL  SELECT towerHanoi( $1 - 1, $2 , $3 , $4 )
  PL/pgSQL function  towerhanoi  line 7 at perform
  NOTA: DISK 3 Move da haste 1 para haste 3
  NOTA: DISK 1 Move da haste 1 para haste 3
  CONTEXT: comando SQL  SELECT towerHanoi( $1 - 1, $2 , $3 , $4 )
  PL/pgSQL function  towerhanoi  line 7 at perform
  comando SQL  SELECT towerHanoi( $1 - 1, $2 , $3 , $2 )
  PL/pgSQL function  towerhanoi  line 9 at perform
  NOTA: DISK 2 Move da haste 1 para haste 1
  CONTEXT: comando SQL  SELECT towerHanoi( $1 - 1, $2 , $3 , $2 )
  PL/pgSQL function  towerhanoi  line 9 at perform
  NOTA: DISK 1 Move da haste 1 para haste 1
  CONTEXT: comando SQL  SELECT towerHanoi( $1 - 1, $2 , $3 , $2 )
  PL/pgSQL function  towerhanoi  line 9 at perform
  comando SQL  SELECT towerHanoi( $1 - 1, $2 , $3 , $2 )
  PL/pgSQL function  towerhanoi  line 9 at perform
  
  Total query runtime: 2 ms.
  Data retrieval runtime: 7 ms.
  1 rows retrieved.

Esta simples função demonstra como usar recursividade, passagem de parâmetros e como chamar uma função em PL/PGSQL.

Marlon Luis Petry - Bel. Ciência da Computação - Linux, Programação, Banco de Dados.

Configurando WAKE ON LAN no Debian

Colaboração: Ricardo Caldas

O que aconteceria se um dia você precisasse religar uma máquina que você nao tem acesso físico? Uma das soluções para esse problema é o recurso Wake on Lan(WOL) das atuais placas de rede(juntamente com a placa mãe).

Este recurso permite que quando a máquina desligue a placa de rede fique em estado como de hibernação, respondendo só a um pacote chamado MagicPacket. Para isso tudo funcionar necessário 2 programas: wakeonlan <== Para enviar o magicpacket a placa de rede(mac addr). ethtool <== Para iniciar o modulo WOL na placa de rede.

Veja um passo-a-passo detalhado aqui: http://ostrecosdeti.wordpress.com/2008/07/31/configurando-wake-on-lan-no-debian/

Veja a relação completa dos artigos de Marlon Luis Petry

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 3.01/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (1048 votos)

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script

Treinamentos, Consultorias e Soluçoes em TI. Baseados em softwares livres e padrões abertos para ambientes de missão crítica

Submarino.com.br

As Palavras Mais Comuns da Língua Inglesa (2ª edição)