Procedures and Functions in Oracle DB

Procedures and functions encapsulate a group of SQL and PL/SQL statements. A function is different from stored procedure in that a function must return a value.

 

Creating procedures and functions

You can create a procedure using the CREATE PROCEDURE statement as:

CREATE PROCEDURE insert_emp_details_p(

emp_id_var IN emp.emp_id%TYPE,

emp_name_var IN emp.emp_name%TYPE

) AS

 

BEGIN

 

INSERT INTO emp values (emp_id_var, emp_name_var);

 

COMMIT;

 

EXCEPTION

  WHEN OTHERS THEN

    ROLLBACK;

END insert_emp_details_p;

 

You can modify a procedure using CREATE OR REPLACE PROCEDURE:

CREATE OR REPLACE PROCEDURE insert_emp_details_p(

emp_id_var IN emp.emp_id%TYPE,

emp_name_var IN emp.emp_name%TYPE

) AS

emp_count INTEGER;

BEGIN

 

INSERT INTO emp values (emp_id_var, emp_name_var);

 

SELECT COUNT(*)

INTO emp_count

FROM emp;

 

COMMIT;

 

EXCEPTION

  WHEN OTHERS THEN

    ROLLBACK;

END insert_emp_details_p;

 

You can create a function using CREATE FUNCTION:

CREATE FUNCTION add_num_f(

num1 IN NUMBER,

num2 IN NUMBER

) RETURN NUMBER AS

num3 INTEGER;

BEGIN

num3:=num1+num2;

RETURN num3;

END add_num_f;

Similarly you can modify a function using CREATE OR REPLACE FUNCTION as in the example for CREATE OR REPLACE PROCEDURE.

 

Calling procedures and functions

You can call a procedure using CALL statement:

CALL insert_emp_details_p(1, 'Heartin');

 

You can call a function passing the required arguments and assign the return value back to a variable within a PL/SQL:

myvar:= add_num_f(2, 3);

Outside PL/SQL, within a SELECT query, you can call your function like any other function as:

SELECT add_num_f(2, 3) FROM dual;

NOTE: The DUAL table is a special one-row, one-column table present by default in all Oracle database installations. The table has a single VARCHAR2(1) column called DUMMY that has a value of 'X'. It is suitable for use in selecting a pseudo column such as SYSDATE or USER or for calling a function.

 

A function with a DDL, commit or rollback

You cannot, by default, call a function with a DDL, commit or rollback as you cannot perform a DDL, commit or rollback inside a query or DML. As a work around you could add ‘PRAGMA AUTONOMOUS_TRANSACTION’ in that case as:

CREATE OR REPLACE FUNCTION insert_emp_details_f(

emp_id_var IN emp.emp_id%TYPE,

emp_name_var IN emp.emp_name%TYPE

) RETURN NUMBER AS

PRAGMA AUTONOMOUS_TRANSACTION;

emp_count INTEGER;

BEGIN

 

INSERT INTO emp values (emp_id_var, emp_name_var);

 

SELECT COUNT(*)

INTO emp_count

FROM emp;

 

COMMIT;

RETURN emp_count;

EXCEPTION

  WHEN OTHERS THEN

    ROLLBACK;

END insert_emp_details_f;

 

You can now call it as:

select insert_emp_details_f(2, 'Jacob') FROM dual;

 

Dropping procedure and function

You can drop procedure and function using DROP PROCEDURE and DROP FUNCTION:

DROP PROCEDURE insert_emp_details_p;

DROP FUNCTION insert_emp_details_f;

 

Viewing errors

Compilation errors for procedures and functions can be viewed after a create procedure or create function as:

SHOW ERRORS

 

Reference

http://en.wikipedia.org/wiki/DUAL_table

Quick Notes Finder Tags

Activities (1) advanced java (1) agile (3) App Servers (6) archived notes (2) Arrays (1) Best Practices (12) Best Practices (Design) (3) Best Practices (Java) (7) Best Practices (Java EE) (1) BigData (3) Chars & Encodings (6) coding problems (2) Collections (15) contests (3) Core Java (All) (55) course plan (2) Database (12) Design patterns (8) dev tools (3) downloads (2) eclipse (9) Essentials (1) examples (14) Exception (1) Exceptions (4) Exercise (1) exercises (6) Getting Started (18) Groovy (2) hadoop (4) hibernate (77) hibernate interview questions (6) History (1) Hot book (5) http monitoring (2) Inheritance (4) intellij (1) java 8 notes (4) Java 9 (1) Java Concepts (7) Java Core (9) java ee exercises (1) java ee interview questions (2) Java Elements (16) Java Environment (1) Java Features (4) java interview points (4) java interview questions (4) javajee initiatives (1) javajee thoughts (3) Java Performance (6) Java Programmer 1 (11) Java Programmer 2 (7) Javascript Frameworks (1) Java SE Professional (1) JPA 1 - Module (6) JPA 1 - Modules (1) JSP (1) Legacy Java (1) linked list (3) maven (1) Multithreading (16) NFR (1) No SQL (1) Object Oriented (9) OCPJP (4) OCPWCD (1) OOAD (3) Operators (4) Overloading (2) Overriding (2) Overviews (1) policies (1) programming (1) Quartz Scheduler (1) Quizzes (17) RabbitMQ (1) references (2) restful web service (3) Searching (1) security (10) Servlets (8) Servlets and JSP (31) Site Usage Guidelines (1) Sorting (1) source code management (1) spring (4) spring boot (3) Spring Examples (1) Spring Features (1) spring jpa (1) Stack (1) Streams & IO (3) Strings (11) SW Developer Tools (2) testing (1) troubleshooting (1) user interface (1) vxml (8) web services (1) Web Technologies (1) Web Technology Books (1) youtube (1)