Complete Course On PL/SQL
Complete Course On PL/SQL
Yanis Monnah
November 22, 2024
Contents
1 Introduction to PL/SQL 2
4 Cursors 3
4.1 Explicit Cursor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
5 Stored Procedures 3
5.1 Create a Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
5.2 Execute a Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
6 Functions 4
6.1 Create a Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
6.2 Use a Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
7 Triggers 4
7.1 Create a Trigger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
8 Error Handling 4
8.1 Error Handling Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
9 Practical Exercise 5
9.1 Create a Database: Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
9.2 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1
1 Introduction to PL/SQL
PL/SQL (Procedural Language/SQL) is an extension of SQL that adds programming constructs
such as loops, conditions, procedures, etc. It is primarily used for:
• Automating repetitive tasks;
Example:
1 DECLARE
2 v_message VARCHAR2 (50) ;
3 BEGIN
4 v_message := ’ Hello ␣ PL / SQL ! ’;
5 DBMS_OUTPUT . PUT_LINE ( v_message ) ;
6 END ;
2
3.3 WHILE Loop
1 DECLARE
2 v_counter NUMBER := 1;
3 BEGIN
4 WHILE v_counter <= 3 LOOP
5 DBMS_OUTPUT . PUT_LINE ( ’ Counter : ␣ ’ || v_counter ) ;
6 v_counter := v_counter + 1;
7 END LOOP ;
8 END ;
4 Cursors
4.1 Explicit Cursor
1 DECLARE
2 CURSOR cur_emp IS SELECT first_name , salary FROM employees ;
3 v_name employees . first_name % TYPE ;
4 v_salary employees . salary % TYPE ;
5 BEGIN
6 OPEN cur_emp ;
7 LOOP
8 FETCH cur_emp INTO v_name , v_salary ;
9 EXIT WHEN cur_emp % NOTFOUND ;
10 DBMS_OUTPUT . PUT_LINE ( ’ Employee : ␣ ’ || v_name || ’␣ -␣ Salary : ␣ ’ ||
v_salary ) ;
11 END LOOP ;
12 CLOSE cur_emp ;
13 END ;
5 Stored Procedures
5.1 Create a Procedure
1 CREATE OR REPLACE PROCEDURE greet_user ( p_name IN VARCHAR2 ) IS
2 BEGIN
3 DBMS_OUTPUT . PUT_LINE ( ’ Hello , ␣ ’ || p_name || ’! ’) ;
4 END ;
3
6 Functions
6.1 Create a Function
1 CREATE OR REPLACE FUNCTION calculate_tax ( p_salary IN NUMBER ) RETURN NUMBER
IS
2 v_tax NUMBER ;
3 BEGIN
4 v_tax := p_salary * 0.2;
5 RETURN v_tax ;
6 END ;
7 Triggers
7.1 Create a Trigger
1 CREATE OR REPLACE TRIGGER t r g _ a f t e r _ i n s e r t _ e m p l o y e e
2 AFTER INSERT ON employees
3 FOR EACH ROW
4 BEGIN
5 DBMS_OUTPUT . PUT_LINE ( ’ New ␣ employee ␣ added : ␣ ’ || : NEW . first_name ) ;
6 END ;
8 Error Handling
8.1 Error Handling Example
1 DECLARE
2 v_num NUMBER ;
3 BEGIN
4 BEGIN
5 v_num := 10 / 0; -- Error !
6 EXCEPTION
7 WHEN ZERO_DIVIDE THEN
8 DBMS_OUTPUT . PUT_LINE ( ’ Error : ␣ Division ␣ by ␣ zero ’) ;
9 END ;
10 END ;
4
9 Practical Exercise
9.1 Create a Database: Library
1 CREATE TABLE books (
2 book_id NUMBER PRIMARY KEY ,
3 title VARCHAR2 (100) ,
4 author VARCHAR2 (50) ,
5 price NUMBER
6 );
7
8 CREATE TABLE transactions (
9 transaction_id NUMBER PRIMARY KEY ,
10 book_id NUMBER REFERENCES books ( book_id ) ,
11 transaction_date DATE ,
12 transaction_type VARCHAR2 (10) -- ’ BORROW ’ or ’ RETURN ’
13 );
14
15 INSERT INTO books VALUES (1 , ’ Oracle ␣ PL / SQL ␣ Programming ’ , ’ Steven ␣ Feuerstein
’ , 50) ;
16 INSERT INTO books VALUES (2 , ’ Database ␣ Systems ’ , ’ Elmasri ’ , 40) ;
17 INSERT INTO books VALUES (3 , ’ SQL ␣ Fundamentals ’ , ’ Ben ␣ Forta ’ , 30) ;
9.2 Exercises
1. Create a Procedure to Add a Book:
1 CREATE OR REPLACE PROCEDURE add_book ( p_title IN VARCHAR2 , p_author
IN VARCHAR2 , p_price IN NUMBER ) IS
2 BEGIN
3 INSERT INTO books ( book_id , title , author , price )
4 VALUES ( books_seq . NEXTVAL , p_title , p_author , p_price ) ;
5 END ;
5
4. Create a Loop to Display All Books:
1 DECLARE
2 CURSOR cur_books IS SELECT title , author FROM books ;
3 v_title books . title % TYPE ;
4 v_author books . author % TYPE ;
5 BEGIN
6 OPEN cur_books ;
7 LOOP
8 FETCH cur_books INTO v_title , v_author ;
9 EXIT WHEN cur_books % NOTFOUND ;
10 DBMS_OUTPUT . PUT_LINE ( ’ Book : ␣ ’ || v_title || ’␣ -␣ Author : ␣ ’ ||
v_author ) ;
11 END LOOP ;
12 CLOSE cur_books ;
13 END ;