Escolar Documentos
Profissional Documentos
Cultura Documentos
FUNCTION
Objetivos
Diferenciar entre procedure e função;
Descrever o objetivo de usar uma função;
Criar, editar e executar funções;
Invocar funções;
Remover funções.
Agenda
Trabalhando com funções:
Diferenciar entre procedure e função;
Descrever as possibilidades de uso de função;
Criar, invocar e remover funções.
Criando função
Uma função deve ter obrigatoriamente uma instrução de
RETURN. Porém, é possível incluir mais de um RETURN no
código (depende da lógica inserida).
Diferença entre procedure e função
Procedures Funções
Executado como uma instrução PL/SQL. Invocado como parte de uma
expressão
Não deve conter a instrução RETURN Deve conter a instrução RETURN
no cabeçalho. no cabeçalho.
Pode passar valores usam um Pode retornar somente um único
parâmetro de saída. valor.
Pode conter uma expressão RETURN Deve conter pelo menos uma
sem conter um valor. instrução RETURN
Criando Função
SIM
Executar função
Criando Função
CREATE OR REPLACE FUNCTION verifica_gerente (
p_employee_id employees.employee_id%TYPE) RETURN NUMBER
IS
v_gerente employees.manager_id%TYPE;
BEGIN
SELECT manager_id
INTO v_gerente
FROM employees
WHERE employee_id = p_employee_id;
RETURN v_gerente;
END;
7
Invocando Função
SET SERVEROUTPUT ON
DECLARE
v_gerente employees.manager_id%TYPE;
BEGIN
v_gerente := verifica_gerente(101);
DBMS_OUTPUT.PUT_LINE('ID do gerente: ' || v_gerente);
END;
/
EXEC dbms_output.put_line(verifica_gerente(200));
8
Invocando Função em expressão SELECT
9
Chamada de função criada pelo
usuário em instrução SQL
Função criada pelo usuário atua como uma função de linha
simples, ou seja, cada registro da instrução SELECT é analisado
pela função definida na lista SELECT.
Pode ser usada em:
Lista SELECT;
Utilizada na cláusula condicional do WHERE ou HAVING;
Cláusula CONNECT BY, START WITH, ORDER BY e
GROUP BY;
Cláusula VALUES da instrução de INSERT;
Cláusula SET da instrução de UPDATE.
Restrições da chamada de função a
partir de instruções SQL
Para uma função definida pelo usuário ser chamada a partir de
instruções SQL faz-se necessário o seguinte:
A função precisa estar definida como função armazenada
(deve existir em um esquema do banco de dados);
Deve aceitar somente parâmetros IN (faz parte da regra da
função usar este tipo de parâmetro);
Retornar um tipo de dados válido, não um tipo PL/SQL
especificado.
UPDATE employees
SET salary = dml_call_sql(4000)
WHERE employee_id = 180;
Notação de parâmetros para
função em SQL
PL/SQL permite que os argumentos na chamada das subrotinas
sejam especificados em notação posicional, nomeada ou
mista;