PL/pgSQL
PL/pgSQL ( Procedural Language/ PostGres Structured Query Language ) é uma extensão procedural da linguagem SQL usada no SGBD PostgreSQL . Esta linguagem destina-se à escrita de funções, triggers e regras e possui as seguintes características:
- adiciona construções de controle ao padrão SQL;
- permite cálculos complexos;
- pode usar todos os objetos de banco de dados definidos pelo usuário;
- fácil de usar.
Benefícios de usar
O SQL padrão é usado no PostgreSQL e em outros bancos de dados relacionais como a linguagem principal para a criação de consultas. É portátil e fácil de aprender e usar. No entanto, seu ponto fraco é que cada construção de linguagem é executada separadamente pelo servidor . Isso significa que a aplicação cliente deve enviar cada solicitação ao servidor, receber seu resultado, processá-lo de uma determinada maneira de acordo com a lógica da aplicação, enviar a próxima solicitação, etc. Se o cliente e o servidor de banco de dados estiverem localizados em máquinas diferentes, isso pode levar a um aumento indesejável nos atrasos e na quantidade de dados enviados do cliente para o servidor e vice-versa.
Ao usar PL/pgSQL, as coisas ficam mais fáceis. Torna-se possível agrupar requisições e blocos computacionais em uma única estrutura que será hospedada e executada no servidor , e o cliente enviará uma requisição para sua execução e receberá o resultado, contornando todas as transferências de dados intermediárias de ida e volta, que na maioria das vezes casos tem um efeito muito positivo no desempenho.
Há também a funcionalidade de blocos anônimos, que permite escrever consultas não em SQL, mas diretamente em qualquer linguagem procedural do servidor existente, incluindo pl/pgSQL, sem criar funções armazenadas no servidor DBMS.
Tipos de argumento e retorno suportados
Funções escritas em PL/pgSQL podem receber como argumentos e retornar valores de qualquer tipo escalar ou composto aceito pelo servidor de banco de dados, incluindo tipos de strings e registros definidos pelo usuário.
Argumentos e valores de retorno dos pseudotipos , e também anyelementsão permitidos . Isso torna possível definir funções polimórficas cujo tipo aceito e retornado pode mudar de chamada para chamada. Funções em PL/pgSQL podem retornar não um valor, mas um conjunto inteiro de valores, ou não retornar nenhum valor (usando o tipo ).
anyarrayanynonarrayanyenumvoid
Estrutura de código PL/pgSQL
Qualquer construção de programa (função, gatilho ou regra) escrita em PL/pgSQL tem um layout de bloco e se parece com isso:
[ << rótulo >> ]
[ DECLARE
declarações de variáveis ]
BEGIN
corpo do programa
END [ rótulo ];
/*
Comentário de várias linhas */
-- Comentário de linha única
Como de costume, colchetes indicam fragmentos que são opcionais e podem não estar presentes em uma versão específica.
Cada declaração individual e cada construção dentro do corpo do programa deve terminar com um ponto e vírgula. Um bloco dentro de outro bloco também deve ter um ponto e vírgula após a terminação END, mas o bloco mais externo ENDnão precisa de um ponto e vírgula.
Qualquer construção dentro do corpo do programa também pode ser separada em um bloco separado, com sua própria seção de declaração de variável.
Sintaxe do idioma
Formato de declaração de variável
Qualquer variável em PL/pgSQL deve ser declarada antes de ser usada, declaração implícita não é suportada; a única exceção é o loop FOR - nele a variável de loop padrão é declarada como INTEGER. É possível atribuir imediatamente um valor a uma variável ou declará-la como uma constante:
nome [ CONSTANT ] tipo [ NOT NULL ] [ { DEFAULT | : = } valor ]; ( Todos os colchetes são obrigatórios )
A palavra-chave DEFAULTé usada para definir um valor padrão, a palavra-chave CONSTANTprotege a variável de alterações posteriores, definindo-a como uma constante.
Passando argumentos
Por padrão, os parâmetros passados são indicados como $1e $2assim por diante. No entanto, se desejar aumentar a legibilidade do código, esses parâmetros podem ser indicados com aliases. Existem duas maneiras.
Você pode definir o nome do parâmetro diretamente na definição da função:
CREATE FUNCTION sales_tax ( subtotal real ) RETORNO real AS $$
BEGIN
RETURN subtotal * 0,06 ;
FIM ;
$$ IDIOMA plpgsql ;
Caso contrário, você pode declarar um alias para o parâmetro diretamente na seção de declaração de variável:
CREATE FUNCTION sales_tax ( real ) RETORNOS real AS $ $
DECLARE
subtotal ALIAS POR $ 1 ; BEGIN RETURN subtotal * 0,06 ; FIM ; $$ IDIOMA plpgsql ;
Veja também
- PL/SQL é uma linguagem próxima da Oracle
- Outras linguagens embarcadas no PostgreSQL :
- PL/Java
- PL/Lua
- PL/Perl
- PL/PHP
- PL/Python
- PL/R
- PL/Rubi
- PL/Esquema
- PL/Sh
- PL/Tcl
- PL/V8
Links
- PL/pgSQL - Linguagem Processual SQL
- Sergei Suprunov. PostgreSQL: Funções e gatilhos // Administrador do sistema . - 2004. - Nº 10 (23) .