0% found this document useful (0 votes)
70 views

Function and Procedures (Professor's Summary)

Procedures and functions allow reusable code to be stored in the database. Procedures perform actions and can return values through output parameters, while functions return a single value and can be used in SQL expressions. Key aspects include creating procedures and functions with parameters, invoking them, handling exceptions, and viewing them in data dictionary views. Functions have additional restrictions when used in SQL for controlling side effects.

Uploaded by

knpanchal
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
70 views

Function and Procedures (Professor's Summary)

Procedures and functions allow reusable code to be stored in the database. Procedures perform actions and can return values through output parameters, while functions return a single value and can be used in SQL expressions. Key aspects include creating procedures and functions with parameters, invoking them, handling exceptions, and viewing them in data dictionary views. Functions have additional restrictions when used in SQL for controlling side effects.

Uploaded by

knpanchal
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 14

Chapter 6

Function and Procedures


(Professor’s Summary)

Creating Stored Procedures

What Is a Procedure?

A procedure:
 Is a type of subprogram that performs an action
 Can be stored in the database as a schema object
 Promotes reusability and maintainability

Syntax for Creating Procedures


CREATE [OR REPLACE] PROCEDURE procedure_name
[(parameter1 [mode] datatype1,
parameter2 [mode] datatype2, ...)]
IS|AS
[local_variable_declarations; …]
BEGIN
-- actions;
END [procedure_name];

What Are Parameters?


Parameters:
 Are declared after the subprogram name in the
PL/SQL header
 Pass or communicate data between the caller and
the subprogram
 Are used like local variables but are dependent on
their parameter-passing mode: IN, OUT, IN OUT

Example:
CREATE PROCEDURE raise_sal(id NUMBER,sal NUMBER) IS
BEGIN ...
END raise_sal;

emp_id := 100;
raise_sal(emp_id, 2000)

Using IN Parameters: Example


CREATE OR REPLACE PROCEDURE raise_salary
(id IN employees.employee_id%TYPE,
percent IN NUMBER)
IS
BEGIN
UPDATE employees
SET salary = salary * (1 + percent/100)
WHERE employee_id = id;
END raise_salary;
/
EXECUTE raise_salary(176,10)
Using OUT Parameters: Example
CREATE OR REPLACE PROCEDURE query_emp
(id IN employees.employee_id%TYPE,
name OUT employees.last_name%TYPE,
salary OUT employees.salary%TYPE) IS
BEGIN
SELECT last_name, salary INTO name, salary
FROM employees
WHERE employee_id = id;
END query_emp;

DECLARE
emp_name employees.last_name%TYPE;
emp_sal employees.salary%TYPE;
BEGIN
query_emp(171, emp_name, emp_sal); ...
END;

VARIABLE name VARCHAR2(25)


VARIABLE sal NUMBER
EXECUTE query_emp(171, :name, :sal)
PRINT name sal
SET SERVEROUTPUT ON

DECLARE
emp_name employees.last_name%TYPE;
emp_sal employees.salary%TYPE;
BEGIN
query_emp(171, emp_name, emp_sal);
DBMS_OUTPUT.PUT_LINE('Name: ' || emp_name);
DBMS_OUTPUT.PUT_LINE('Salary: ' || emp_sal);
END;
Using IN OUT Parameters: Example

CREATE OR REPLACE PROCEDURE format_phone


(phone_no IN OUT VARCHAR2) IS
BEGIN
phone_no := '(' || SUBSTR(phone_no,1,3) ||
')' || SUBSTR(phone_no,4,3) ||
'-' || SUBSTR(phone_no,7);
END format_phone;
/

'8006330575' --> '(800)633-0575'

Syntax for Passing Parameters


 Positional: Lists the actual parameters in the
same order as the formal parameters
 Named: Lists the actual parameters in arbitrary
order and uses the association operator (=>) to
associate a named formal parameter with its
actual parameter
 Combination: Lists some of the actual parameters
as positional and some as named

Parameter Passing: Examples


CREATE OR REPLACE PROCEDURE add_dept(
name IN departments.department_name%TYPE,
loc IN departments.location_id%TYPE) IS
BEGIN
INSERT INTO departments(department_id,
department_name, location_id)
VALUES (departments_seq.NEXTVAL, name, loc);
END add_dept;
/

EXECUTE add_dept ('TRAINING', 2500)

EXECUTE add_dept (loc=>2400, name=>'EDUCATION')

Using the DEFAULT Option for Parameters

 Defines default values for parameters:

CREATE OR REPLACE PROCEDURE add_dept(


name departments.department_name%TYPE:='Unknown',
loc departments.location_id%TYPE DEFAULT 1700)
IS
BEGIN
INSERT INTO departments (...)
VALUES (departments_seq.NEXTVAL, name, loc);
END add_dept;

 Provides flexibility by combining the positional


and named parameter-passing syntax:
EXECUTE add_dept
EXECUTE add_dept ('ADVERTISING', loc => 1200)
EXECUTE add_dept (loc => 1200)
Invoking Procedures
You can invoke procedures by:
 Using anonymous blocks
 Using another procedure, as in the following
example:

CREATE OR REPLACE PROCEDURE process_employees


IS
CURSOR emp_cursor IS
SELECT employee_id
FROM employees;
BEGIN
FOR emp_rec IN emp_cursor
LOOP
raise_salary(emp_rec.employee_id, 10);
END LOOP;
COMMIT;
END process_employees;
/

Handled Exceptions: Example


CREATE PROCEDURE add_department(
name VARCHAR2, mgr NUMBER, loc NUMBER) IS
BEGIN
INSERT INTO DEPARTMENTS (department_id,
department_name, manager_id, location_id)
VALUES (DEPARTMENTS_SEQ.NEXTVAL, name, mgr, loc);
DBMS_OUTPUT.PUT_LINE('Added Dept: '||name);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Err: adding dept: '||name);
END;

CREATE PROCEDURE create_departments IS


BEGIN
add_department('Media', 100, 1800);
add_department('Editing', 99, 1800);
add_department('Advertising', 101, 1800);
END;

Removing Procedures

You can remove a procedure that is stored in the


database.

DROP PROCEDURE procedure_name


DROP PROCEDURE raise_salary;
Viewing Procedures in the Data Dictionary

Information for PL/SQL procedures is saved in the


following data dictionary views:
 USER_SOURCE, ALL_SOURCE
 USER_OBJECTS

SELECT text
FROM user_source
WHERE name='ADD_DEPARTMENT' and type='PROCEDURE'
ORDER BY line;

SELECT object_name
FROM user_objects
WHERE object_type = 'PROCEDURE';

Benefits of Subprograms
 Easy maintenance
 Improved data security and integrity
 Improved performance
 Improved code clarity
Creating Stored Functions

Overview of Stored Functions


A function:
 Is a named PL/SQL block that returns a value
 Can be stored in the database as a schema object
for repeated execution
 Is called as part of an expression or is used to
provide a parameter value

Syntax for Creating Functions


CREATE [OR REPLACE] FUNCTION function_name
[(parameter1 [mode1] datatype1, ...)]
RETURN datatype IS|AS
[local_variable_declarations; …]
BEGIN
-- actions;
RETURN expression;
END [function_name];
Stored Function: Example

CREATE OR REPLACE FUNCTION get_sal


(id employees.employee_id%TYPE) RETURN NUMBER IS
sal employees.salary%TYPE := 0;
BEGIN
SELECT salary
INTO sal
FROM employees
WHERE employee_id = id;
RETURN sal;
END get_sal;
/

EXECUTE dbms_output.put_line(get_sal(100))

Ways to Execute Functions


VARIABLE salary NUMBER
EXECUTE :salary := get_sal(100)

DECLARE sal employees.salary%type;


BEGIN
sal := get_sal(100); ...
END;

EXECUTE dbms_output.put_line(get_sal(100))

SELECT job_id, get_sal(employee_id) FROM employees;

Function in SQL Expressions: Example


CREATE OR REPLACE FUNCTION tax(value IN NUMBER)
RETURN NUMBER IS
BEGIN
RETURN (value * 0.08);
END tax;
/

SELECT employee_id, last_name, salary, tax(salary)


FROM employees
WHERE department_id = 100;

Locations to Call User-Defined Functions

 The SELECT list or clause of a query


 Conditional expressions of the WHERE and
HAVING clauses
 The CONNECT BY, START WITH, ORDER BY, and
GROUP BY clauses of a query
 The VALUES clause of the INSERT statement
 The SET clause of the UPDATE statement

Restrictions on Calling Functions from SQL


Expressions

User-defined functions that are callable from SQL


expressions must:
 Be stored in the database
 Accept only IN parameters with valid SQL data
types, not PL/SQL-specific types
 Return valid SQL data types, not PL/SQL-specific
types

When calling functions in SQL statements:


 Parameters must be specified with positional
notation
 You must own the function or have the EXECUTE
privilege

Controlling Side Effects When Calling

Functions from SQL Expressions


Functions called from:
 A SELECT statement cannot contain DML
statements
 An UPDATE or DELETE statement on a table T
cannot query or contain DML on the same table T
 SQL statements cannot end transactions (that is,
cannot execute COMMIT or ROLLBACK
operations)

Note: Calls to subprograms that break these


restrictions are also not allowed in the function.

Removing Functions

DROP FUNCTION function_name


DROP FUNCTION get_sal;

Viewing Functions in the Data Dictionary


Information for PL/SQL functions is stored in the
following Oracle data dictionary views:
 USER_SOURCE, ALL_SOURCE
 USER_OBJECTS

SELECT text
FROM user_source
WHERE type = 'FUNCTION'
ORDER BY line;

SELECT object_name
FROM user_objects
WHERE object_type = 'FUNCTION';
Procedures versus Functions

Procedures
 Execute as a PL/SQL statement
 Do not contain RETURN clause in the header
 Can return values (if any) in output parameters
 Can contain a RETURN statement without a value

Functions
 Invoke as part of an expression
 Must contain a RETURN clause in the header
 Must return a single value
 Must contain at least one RETURN statement

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy