Procedimentos Armazenados
Procedimentos Armazenados
Procedimentos Armazenados
Procedimentos armazenados
– Bloco de declaração/cabeçalho.
DECLARE
– Bloco executável.
BEGIN
– Bloco de exceções.
EXCEPTION
– Bloco de término.
END
Cabeçalho PL/pgSQL
CREATE FUNCTION nome_função(parâmetros)
RETURNS tipo_retorno
AS $$ Inicio da função.
...
$$ Final da função.
LANGUAGE 'plpgsql';
Declaração PL/pgSQL
• As variáveis que são usadas na função se situam após
o início do bloco de declaração da função.
DECLARE
V1 VARCHAR;
N1 INTEGER;
BEGIN := atribuição
IF (N1>N2) THEN = Igualdade
R:=N1;
ELSE
R:=N2;
END IF
RETURN R;
Exceções PL/pgSQL
• Caracterizado pela declaração do bloco de exceções
que pode ser oculto e o disparo da exceção.
EXCEPTION
..
$$
END;
LANGUAGE 'plpgsql';
Return Resultado;
END;
$$
LANGUAGE 'plpgsql';
Aumentando a dificuldade
• O procedimento do exemplo é simples pois:
– Não possui tipos de variáveis de retorno de tuplas (registros).
– Não possui estruturas de controle.
– Não lança exceções.
– Não possui estrutura de repetição.
– Possui retorno simples (é uma função por possuir retorno).
Sintaxe:
Variável := expressão ou valor
Sintaxe:
Variável = expressão ou valor
Sintaxe:
Return Variável
Sintaxe:
IF condição THEN
–código–
END IF;
Exemplos:
IF (N1>N2) THEN
MAIOR:=N1;
END IF;
Condicionais
• Claro que o ELSE não poderia ficar de fora.
Sintaxe:
IF condição THEN –código– ELSE –código–
END IF;
Exemplos:
IF (N1>N2) THEN
MAIOR:=N1;
ELSE
MAIOR:=N2;
END IF;
Condicionais
• Por último os condicionais aninhados.
Sintaxe:
IF condição THEN –código– ELSEIF condição
THEN –código– ELSE –código– END
IF;
Exemplos:
IF (N1>=6) THEN
R:='Aprovado';
ELSEIF (N1>=4) THEN
R:='EXAME';
ELSE:
R:='REPROVADO'; END IF;
Condicionais
• O Case:
Sintaxe:
CASE
WHEN condição THEN –código–
WHEN condição THEN –código–
END CASE
Exemplos:
CASE
WHEN X BETWEEN 1 AND 4 THEN Msg:=‘S’
WHEN X BETWEEN 5 AND 9 THEN Msg:=‘N’
END CASE;
Pondo em Prática
CREATE FUNCTION TesteCase (n numeric) returns text as $$
DECLARE
Msg text;
BEGIN
CASE
WHEN n BETWEEN 1 AND 4 THEN Msg:='1-4';
WHEN n BETWEEN 5 AND 9 THEN Msg:='5-9';
END CASE;
RETURN Msg;
END;
$$
LANGUAGE 'plpgsql';
Repetição
• O While garante as necessidades de repetição.
• Ele é usado em conjunto com o Loop, uma repetição
indeterminada.
Sintaxe:
While condição LOOP –código– END LOOP;
Exemplos:
While X<=100 LOOP
X:=X+1;
END LOOP;
Repetição
• O Loop é como se fosse um For infinito, ele é sempre
usado em conjunto com While, Continue e Exit
When.
Sintaxe:
LOOP –código– END LOOP;
LOOP –código– EXIT WHEN condição END LOOP;
Exemplos:
LOOP
c:=c-1;
IF c=0 THEN EXIT;
END IF;
END LOOP;
Repetição
• O FOR:
Sintaxe:
For i in [REVERSE] lmin..lmax
LOOP –código– END LOOP
Exemplos:
FOR i IN 1..100 LOOP
n:=n*a;
END LOOP;
Pondo em Prática
CREATE FUNCTION TesteFor (n numeric) returns numeric as $$
DECLARE
i numeric;
BEGIN
i:=0;
RETURN n;
END;
$$
LANGUAGE 'plpgsql';
Referências
• Funções SQL PostgreSQL
http://www.postgresql.org/docs/9.2/static/xfunc-sql.html