Hi folks,
A procedure is a subprogram that performs a specific action. This feature is extremely important and vastly that we can use when developing in PL/SQL. Before invoking a procedure, you must declare and define it. You can either declare it first (with procedure_declaration) and then define it later in the same block, subprogram, or package (with procedure_definition) or declare and define it at the same time (with procedure_definition).
Syntax
create or replace procedure <Name> (<parameter list>) as --local variable declaration begin --code section exceptions --optional --handlers end;
Example 1
The following procedure is a quite simple example and it is responsible for inserting new registers to the log table. The file create_table_it_tutorial_log create_table_it_tutorial_log
Procedure
CREATE OR REPLACE PROCEDURE p_insert_log (p_descr_log varchar2) AS v_new_id number; BEGIN select nvl(max(id), 0) + 1 into v_new_id from it_tutorial_log; insert into it_tutorial_log (id, descr_log, date_log, user_log) values (v_new_id, p_descr_log, sysdate, user); END p_insert_log;
Execution
DECLARE P_DESCR_LOG VARCHAR2(200); BEGIN P_DESCR_LOG := 'FIRST PROCEDURE TEST'; P_INSERT_LOG( P_DESCR_LOG ); END;
Example 2 – Adding exception handling
For more details about exception handling please check out my post below
Procedure
create or replace PROCEDURE p_insert_log (p_descr_log varchar2, p_msg_return OUT varchar2) AS v_new_id NUMBER; v_local_except EXCEPTION; v_error_msg VARCHAR2(255); BEGIN select nvl(max(id), 0) + 1 into v_new_id from it_tutorial_log; IF NVL(p_descr_log, 'N') = 'N' THEN v_error_msg := 'The description is a required column!'; raise v_local_except; END IF; insert into it_tutorial_log (id, descr_log, date_log, user_log) values (v_new_id, p_descr_log, sysdate, user); EXCEPTION WHEN v_local_except THEN p_msg_return := 'Program: p_insert_log - Error: ' || v_error_msg; END p_insert_log;
Execution
DECLARE P_DESCR_LOG VARCHAR2(255); P_OUTPUT VARCHAR2(255); BEGIN P_DESCR_LOG := null; P_INSERT_LOG( P_DESCR_LOG, P_OUTPUT); IF NVL(P_OUTPUT, 'N') != 'N' THEN dbms_output.put_line(P_OUTPUT); END IF; END;
This post is part of a series about the most common structures in PL/SQL. You can check the rest of them in the link below.
Please write down in the comments any further questions you may have. I’ll be happy to help you.