Sitemap
Daniel Amorim

Daniel Amorim

Engenheiro de computação, MBA em Data Science, apaixonado por dados e tecnologias!

Oracle Procedures (Parte 06)

Procedures

3 min readOct 2, 2023

--

Com procedures podemos definir linhas de comandos que serão chamadas sempre que executarmos a procedure não só no ambiente Oracle, mas por programas externos, economizando em código, a sintaxe básica de uma procedure é:

CREATE OR REPLACE PROCEDURE nome_procedure
(
nome_parametro1 IN TIPO,
nome_parametro2 IN TIPO,
)
IS (ou AS)
[declara variáveis]
BEGIN
--comandos sql plsql
EXCEPTION
--tratamento
END;

INSERT USANDO PROCEDURE

Vamos para um exemplo pratico de criação de procedure, nela vamos criar um rotina de inserção de empregados:


CREATE OR REPLACE PROCEDURE PRC_INSERE_EMPREGADO
(pfirst_name IN VARCHAR2,
plast_name IN VARCHAR2,
pemail IN VARCHAR2,
pphone_number IN VARCHAR2,
phire_date IN DATE DEFAULT SYSDATE,
pjob_id IN VARCHAR2,
pSALARY IN NUMBER,
pCOMMICION_PCT IN NUMBER,
pMANAGER_ID IN NUMBER,
pDEPARTMENT_ID IN NUMBER)
IS
-- Nenhuma variável declarada
BEGIN
INSERT INTO employees (
employee_id,
first_name,
last_name,
email,
phone_number,
hire_date,
job_id,
salary,
commission_pct,
manager_id,
department_id )
VALUES (
employees_seq.nextval,
pfirst_name,
plast_name,
pemail,
pphone_number,
phire_date,
pjob_id,
psalary,
pcommicion_pct,
pmanager_id,
pdepartment_id );
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20001, 'Erro Oracle ' || SQLCODE || SQLERRM);
END;

EDITANDO UMA PROCEDURE

Um vez criada a procedure, ela ficará gravada no banco de dados e para editar futuramente uma procedure, podemos procura-la pelo nome e com o botão direito do mouse -> editar, (figura 01).

Vejamos como chamar a procedure depois de criada:

BEGIN
PRC_INSERE_EMPREGADO('David', 'Bowie','DBOWIE','515.127.4861',SYSDATE,'IT_PROG',15000,NULL,103,60);
COMMIT;
END;

chamando pelo execute:

EXEC PRC_INSERE_EMPREGADO('Greg', 'Lake','GLAKE','515.127.4961',SYSDATE,'IT_PROG',15000,NULL,103,60)
COMMIT;

Get Daniel Amorim’s stories in your inbox

Join Medium for free to get updates from this writer.

TIPOS DE PARÂMETROS

  • IN: DEFINE UM PARAMETRO DE ENTRADA
  • OUT: PARAMETRO DE SAIDA
  • OUT IN: PARAMETRO DE SAIDA

No exemplo anterior usamos um exemplo com passagem de parâmetros IN, Vejamos como usar parâmetros de saída OUT.

SELECT USANDO PROCEDURE

CREATE OR REPLACE PROCEDURE PRC_CONSULTA_EMPREGADO
(pemployee_id IN NUMBER,
pfirst_name OUT VARCHAR2,
plast_name OUT VARCHAR2,
pemail OUT VARCHAR2,
pphone_number OUT VARCHAR2,
phire_date OUT DATE,
pjob_id OUT VARCHAR2,
pSALARY OUT NUMBER,
pCOMMISSION_PCT OUT NUMBER,
pMANAGER_ID OUT NUMBER,
pDEPARTMENT_ID OUT NUMBER)
IS
-- Nenhuma variavel declarada
BEGIN
SELECT
first_name,
last_name,
email,
phone_number,
hire_date,
job_id,
salary,
commission_pct,
manager_id,
department_id
INTO
pfirst_name,
plast_name,
pemail,
pphone_number,
phire_date,
pjob_id,
psalary,
pcommission_pct,
pmanager_id,
pdepartment_id
FROM employees
WHERE employee_id = pemployee_id;

EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20001, 'Empregado Não existe: ' || pemployee_id);
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20002, 'Erro Oracle ' || SQLCODE || SQLERRM);
END;

Agora vamos chamar esta procedure, e ver os dados retornados:

SET SERVEROUTPUT ON
SET VERIFY OFF
DECLARE
employees_record employees%ROWTYPE;
BEGIN
PRC_CONSULTA_EMPREGADO(100, employees_record.first_name, employees_record.last_name, employees_record.email,
employees_record.phone_number, employees_record.hire_date, employees_record.job_id, employees_record.salary,
employees_record.commission_pct, employees_record.manager_id, employees_record.department_id);
DBMS_OUTPUT.PUT_LINE(employees_record.first_name || ' ' ||
employees_record.last_name || ' - ' ||
employees_record.department_id || ' - ' ||
employees_record.job_id || ' - ' ||
employees_record.phone_number || ' - ' ||
LTRIM(TO_CHAR(employees_record.salary, 'L99G999G999D99')));
END;

DICA:

Procedures podem por algum motivo aparecer com status INVALID, mesmo com o código fonte ok, então para corrigir isso podemos compilar novamente a procedure com o comando:

ALTER PROCEDURE nome_procedure COMPILE;

REMOVENDO PROCEDURES DE UM BANCO DE DADOS

Atenção ao remover, pois ela será excluída permanentemente:

DROP PROCEDURE nome_procedure;

ou também pelo comando do mouse, procura a procedure botão direito e eliminar:

--

--

Daniel Amorim
Daniel Amorim

Written by Daniel Amorim

Engenheiro de computação, MBA em Data Science, apaixonado por dados e tecnologias!