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

Les 09 Function Procedure

Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
15 views

Les 09 Function Procedure

Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 8

9

Creating Stored Procedures and Functions

Copyright © 2009, Oracle. All rights reserved.

Objectives

After completing this lesson, you should be able to do the


following:
• Differentiate between anonymous blocks and subprograms
• Create a simple procedure and invoke it from an
anonymous block
• Create a simple function
• Create a simple function that accepts a parameter
• Differentiate between procedures and functions

9-2 Copyright © 2009, Oracle. All rights reserved.

1
Procedures and Functions

• Are named PL/SQL blocks


• Are called PL/SQL subprograms
• Have block structures similar to anonymous blocks:
– Optional declarative section (without the DECLARE keyword)
– Mandatory executable section
– Optional section to handle exceptions

9-3 Copyright © 2009, Oracle. All rights reserved.

Differences Between Anonymous


Blocks and Subprograms

Anonymous Blocks Subprograms


Unnamed PL/SQL blocks Named PL/SQL blocks
Compiled every time Compiled only once
Not stored in the database Stored in the database

Cannot be invoked by other Named and, therefore, can be invoked by


applications other applications
Do not return values Subprograms called functions must return
values.
Cannot take parameters Can take parameters

9-4 Copyright © 2009, Oracle. All rights reserved.

2
Procedure: Syntax

CREATE [OR REPLACE] PROCEDURE procedure_name


[(argument1 [mode1] datatype1,
argument2 [mode2] datatype2,
. . .)]
IS|AS
procedure_body;

9-5 Copyright © 2009, Oracle. All rights reserved.

Procedure: Example

...
CREATE TABLE dept AS SELECT * FROM departments;
CREATE PROCEDURE add_dept IS
v_dept_id dept.department_id%TYPE;
v_dept_name dept.department_name%TYPE;
BEGIN
v_dept_id:=280;
v_dept_name:='ST-Curriculum';
INSERT INTO dept(department_id,department_name)
VALUES(v_dept_id,v_dept_name);
DBMS_OUTPUT.PUT_LINE(' Inserted '|| SQL%ROWCOUNT
||' row ');
END;

9-6 Copyright © 2009, Oracle. All rights reserved.

3
Invoking the Procedure

BEGIN
add_dept;
END;
/
SELECT department_id, department_name FROM dept
WHERE department_id=280;

9-8 Copyright © 2009, Oracle. All rights reserved.

Function: Syntax

CREATE [OR REPLACE] FUNCTION function_name


[(argument1 [mode1] datatype1,
argument2 [mode2] datatype2,
. . .)]
RETURN datatype
IS|AS
function_body;

9-9 Copyright © 2009, Oracle. All rights reserved.

4
Function: Example
CREATE FUNCTION check_sal RETURN Boolean IS
v_dept_id employees.department_id%TYPE;
v_empno employees.employee_id%TYPE;
v_sal employees.salary%TYPE;
v_avg_sal employees.salary%TYPE;
BEGIN
v_empno:=205;
SELECT salary,department_id INTO v_sal,v_dept_id FROM
employees
WHERE employee_id= v_empno;
SELECT avg(salary) INTO v_avg_sal FROM employees WHERE
department_id=v_dept_id;
IF v_sal > v_avg_sal THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN NULL;
END;

9 - 10 Copyright © 2009, Oracle. All rights reserved.

10

Invoking the Function

BEGIN
IF (check_sal IS NULL) THEN
DBMS_OUTPUT.PUT_LINE('The function returned
NULL due to exception');
ELSIF (check_sal) THEN
DBMS_OUTPUT.PUT_LINE('Salary > average');
ELSE
DBMS_OUTPUT.PUT_LINE('Salary < average');
END IF;
END;
/

9 - 11 Copyright © 2009, Oracle. All rights reserved.

11

5
Passing a Parameter to the Function

DROP FUNCTION check_sal;


CREATE FUNCTION check_sal(p_empno employees.employee_id%TYPE)
RETURN Boolean IS
v_dept_id employees.department_id%TYPE;
v_sal employees.salary%TYPE;
v_avg_sal employees.salary%TYPE;
BEGIN
SELECT salary,department_id INTO v_sal,v_dept_id FROM employees
WHERE employee_id=p_empno;
SELECT avg(salary) INTO v_avg_sal FROM employees
WHERE department_id=v_dept_id;
IF v_sal > v_avg_sal THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
EXCEPTION
...

9 - 12 Copyright © 2009, Oracle. All rights reserved.

12

Invoking the Function with a Parameter


BEGIN
DBMS_OUTPUT.PUT_LINE('Checking for employee with id 205');
IF (check_sal(205) IS NULL) THEN
DBMS_OUTPUT.PUT_LINE('The function returned
NULL due to exception');
ELSIF (check_sal(205)) THEN
DBMS_OUTPUT.PUT_LINE('Salary > average');
ELSE
DBMS_OUTPUT.PUT_LINE('Salary < average');
END IF;
DBMS_OUTPUT.PUT_LINE('Checking for employee with id 70');
IF (check_sal(70) IS NULL) THEN
DBMS_OUTPUT.PUT_LINE('The function returned
NULL due to exception');
ELSIF (check_sal(70)) THEN
...
END IF;
END;
/

9 - 13 Copyright © 2009, Oracle. All rights reserved.

13

6
Quiz

Subprograms:
1. Are named PL/SQL blocks and can be invoked by other
applications
2. Are compiled only once
3. Are stored in the database
4. Do not have to return values if they are functions
5. Can take parameters

9 - 14 Copyright © 2009, Oracle. All rights reserved.

14

Summary

In this lesson, you should have learned how to:


• Create a simple procedure
• Invoke the procedure from an anonymous block
• Create a simple function
• Create a simple function that accepts parameters
• Invoke the function from an anonymous block

9 - 15 Copyright © 2009, Oracle. All rights reserved.

15

7
Practice 9: Overview

This practice covers the following topics:


• Converting an existing anonymous block to a procedure
• Modifying the procedure to accept a parameter
• Writing an anonymous block to invoke the procedure

9 - 16 Copyright © 2009, Oracle. All rights reserved.

16

You might also like