SQL - Structured Query Language
Roteiro
• Funções definidas pelo usuário:
• Definição;
• Eventos (Triggers);
• Exercícios.
• Funções avançadas:
• Union, Union all, Intersect;
• Minus, Subquery;
• Exists, Case, Null, Isnull, ifnull, coalesce, nullif;
• Views
• Exercícios.
2
Funções Definidas pelo Usuário
• Também conhecidas como procedures em outras linguagens; • Assim como toda função, tem como finalidade encapsular uma funcionalidade corriqueira de interesse do usuário;
• Podem ser escritas em diversas linguagens, tais como: ruby, C,
3
Funções Definidas pelo Usuário
• Sintaxe:
CREATE [OR REPLACE] FUNCTION nome_da_funcao
[( parameter1 [ mode1] datatype1, parameter2 [ mode2] datatype2,
. . .)]
RETURN tipo_de_dado
IS|AS
Bloco PL/SQL;
4
Funções Definidas pelo Usuário
• Exemplo:
CREATE OR REPLACE FUNCTION add_numeros(nr1 int4, nr2 int4)
RETURNS int4
AS 'SELECT $1 + $2' LANGUAGE 'sql';
EXECUÇÃO:
SELECT add_numeros(300, 700) AS resposta ;
5
Funções Definidas pelo Usuário
• Observe que:
• De acordo com a sintaxe de função, podemos passar parâmetros ou não;
• Os parâmetros podem ser tipos básicos de dados ou estruturas mais complexas (como uma tabela do banco de dados).
6
Funções Definidas pelo Usuário
• Exemplos:
• Seja as instruções SQL abaixo:
CREATE TEMP TABLE empregados ( nome text, salario numeric, idade integer, baia point
);
INSERT INTO empregados VALUES('João',2200,21,point('(1,1)'));
INSERT INTO empregados VALUES('José',4200,30,point('(2,1)'));
7
Funções Definidas pelo Usuário
• Qual o resultado da aplicação da função abaixo?
CREATE FUNCTION dobrar_salario(empregados) RETURNS numeric AS $$
SELECT $1.salario * 2 AS salario;
$$ LANGUAGE SQL;
SELECT nome, dobrar_salario(emp.*) AS sonho
FROM empregados
WHERE empregados.baia ~= point '(2,1)';
8
Funções Definidas pelo Usuário
• Algumas vezes é prático gerar o valor do argumento composto em tempo de execução. Isto pode ser feito através da