PL/PGSQL blocos de código
Posted on out 29, 2008 under Tutoriais | No CommentA linguagem PL/PGSQL permite a criação de blocos de código. Com essa característica é possível definir o escopo das variáveis. Sendo um recurso interessante para deixar o código mais legível, auxiliando também na depuração do código.
As variáveis existem no momento da declaração do bloco até o final do bloco onde a variável é declarada.
Rótulos podem ser adicionados aos blocos para melhorar a leitura e também para qualificar as variáveis que existem dentro do bloco. Os blocos de código são definidos da seguinte forma:
<
Como exemplo vamos criar uma função onde teremos dois blocos global e local, com uma variável declarada no bloco global com o nome v_test do tipo real e outra variável também declarada com o nome v_test dentro do bloco local. Veja o exemplo:
CREATE OR REPLACE FUNCTION test() RETURNS VOID as $$ <> DECLARE v_test REAL; BEGIN v_test := 1; < > DECLARE v_test REAL; BEGIN v_test :=2; RAISE NOTICE 'global.v_test = %, v_test = %',global.v_test,v_test; END local; RAISE NOTICE 'Global v_test = %',v_test; END global; $$ LANGUAGE 'plpgsql';
Resultado da execução:
select test(); NOTA: global.v_test = 1, v_test = 2 NOTA: Global v_test = 1 Tempo total de execução da consulta: 6 ms. 1 registros recuperados.
Essa função demonstra claramente o escopo da variáveis e também demonstra que podemos ter sub blocos de código dentro de uma função.
É importante notar que BEGIN/END é utilizado para agrupar as declarações da linguagem PL/PGSQL e também como comandos de controle de transações. Mas, um detalhe interessante é que funções e triggers não podem iniciar ou encerrar transações e o Postgresql não suporta transações aninhadas.
Carpe Diem.
