11 PL pgSQL - rodrigomourapinto/aprenda_postgresql GitHub Wiki
PL/pgSQL
PL/pgSQL adiciona controle de fluxo e variáveis ao SQL. É útil para funções, procedures e lógica executada no servidor.
Bloco anônimo
DO $$
DECLARE
total_clientes integer;
BEGIN
SELECT COUNT(*)
INTO total_clientes
FROM clientes;
RAISE NOTICE 'Clientes cadastrados: %', total_clientes;
END
$$;
Função
CREATE OR REPLACE FUNCTION fn_preco_com_desconto(
p_preco numeric,
p_percentual numeric
)
RETURNS numeric
LANGUAGE plpgsql
AS $$
BEGIN
RETURN p_preco * (1 - p_percentual / 100);
END;
$$;
Uso:
SELECT fn_preco_com_desconto(100, 10);
IF
DO $$
DECLARE
v_total numeric := 750;
BEGIN
IF v_total >= 500 THEN
RAISE NOTICE 'Pedido com valor alto';
ELSE
RAISE NOTICE 'Pedido dentro do valor normal';
END IF;
END
$$;
FOR
DO $$
DECLARE
r record;
BEGIN
FOR r IN
SELECT produto_id, nome
FROM produtos
ORDER BY produto_id
LOOP
RAISE NOTICE '% - %', r.produto_id, r.nome;
END LOOP;
END
$$;
Tratamento de exceção
DO $$
BEGIN
INSERT INTO categorias (nome) VALUES ('Monitores');
EXCEPTION
WHEN unique_violation THEN
RAISE NOTICE 'Categoria já existente';
END
$$;
PL/pgSQL é particularmente útil quando várias operações SQL precisam participar de uma mesma rotina no servidor.