Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources

Advanced Data Modeling: Stored Procedures in Oracle

Introduction

Stored procedures are a powerful feature in Oracle databases that allow you to encapsulate SQL and PL/SQL code for reuse and better performance. They can be used to perform complex operations, enforce business rules, and manage transactions.

Creating Stored Procedures

To create a stored procedure in Oracle, you use the CREATE PROCEDURE statement. Here is the basic syntax:

CREATE [OR REPLACE] PROCEDURE procedure_name 
    [parameter_list]
IS
    [declaration_section]
BEGIN
    [executable_section]
EXCEPTION
    [exception_section]
END procedure_name;
                

Let's create a simple stored procedure that prints a welcome message:

CREATE OR REPLACE PROCEDURE welcome_message IS
BEGIN
    DBMS_OUTPUT.PUT_LINE('Welcome to Oracle Stored Procedures!');
END welcome_message;
                

To execute the procedure, use the EXEC or CALL statement:

EXEC welcome_message;
                

Using Parameters

Stored procedures can accept parameters to make them more flexible and reusable. Parameters can be of three types: IN, OUT, and IN OUT.

IN Parameter

An IN parameter is used to pass values to the procedure. Here is an example:

CREATE OR REPLACE PROCEDURE greet_user (p_name IN VARCHAR2) IS
BEGIN
    DBMS_OUTPUT.PUT_LINE('Hello, ' || p_name || '!');
END greet_user;
                

Execute it with:

EXEC greet_user('Alice');
                

OUT Parameter

An OUT parameter is used to return values from the procedure. Example:

CREATE OR REPLACE PROCEDURE get_square (p_number IN NUMBER, p_square OUT NUMBER) IS
BEGIN
    p_square := p_number * p_number;
END get_square;
                

Execute it with:

DECLARE
    l_square NUMBER;
BEGIN
    get_square(5, l_square);
    DBMS_OUTPUT.PUT_LINE('Square: ' || l_square);
END;
                

IN OUT Parameter

An IN OUT parameter is used to pass initial values and return updated values. Example:

CREATE OR REPLACE PROCEDURE double_value (p_value IN OUT NUMBER) IS
BEGIN
    p_value := p_value * 2;
END double_value;
                

Execute it with:

DECLARE
    l_value NUMBER := 10;
BEGIN
    double_value(l_value);
    DBMS_OUTPUT.PUT_LINE('Doubled Value: ' || l_value);
END;
                

Handling Exceptions

Exception handling is crucial for managing errors in your stored procedures. Oracle provides a robust exception-handling mechanism using the EXCEPTION block.

Example:

CREATE OR REPLACE PROCEDURE divide_numbers (p_num1 IN NUMBER, p_num2 IN NUMBER, p_result OUT NUMBER) IS
BEGIN
    p_result := p_num1 / p_num2;
EXCEPTION
    WHEN ZERO_DIVIDE THEN
        DBMS_OUTPUT.PUT_LINE('Error: Division by zero');
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
END divide_numbers;
                

Execute it with:

DECLARE
    l_result NUMBER;
BEGIN
    divide_numbers(10, 0, l_result);
END;
                

Advanced Topics

Cursors

Cursors are used to fetch multiple rows of data in a controlled manner. Example:

CREATE OR REPLACE PROCEDURE list_employees IS
    CURSOR emp_cursor IS SELECT emp_name FROM employees;
    l_emp_name employees.emp_name%TYPE;
BEGIN
    OPEN emp_cursor;
    LOOP
        FETCH emp_cursor INTO l_emp_name;
        EXIT WHEN emp_cursor%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(l_emp_name);
    END LOOP;
    CLOSE emp_cursor;
END list_employees;
                

Execute it with:

EXEC list_employees;
                

Dynamic SQL

Dynamic SQL allows you to build and execute SQL statements at runtime. Example:

CREATE OR REPLACE PROCEDURE execute_dynamic_sql (p_table_name IN VARCHAR2) IS
    l_sql VARCHAR2(200);
BEGIN
    l_sql := 'SELECT COUNT(*) FROM ' || p_table_name;
    EXECUTE IMMEDIATE l_sql;
END execute_dynamic_sql;
                

Execute it with:

EXEC execute_dynamic_sql('employees');
                

Conclusion

Stored procedures in Oracle are a powerful tool for encapsulating business logic and improving performance. They support parameterized inputs, exception handling, and advanced features like cursors and dynamic SQL. Mastering stored procedures will significantly enhance your database development skills.