PL/SQL
PL/SQL
What is PL/SQL
– Procedural Language – SQL
– An extension to SQL with design features of programming
languages (procedural and object oriented)
– PL/SQL and Java are both supported as internal host
languages within Oracle products.
Why PL/SQL
– Acts as host language for stored procedures and triggers.
– Provides the ability to add middle tier business logic to client/server
applications.
– Provides Portability of code from one environment to another
– Improves performance of multi-query transactions.
– Provides error handling
PL/SQL BLOCK
STRUCTURE
DECLARE (optional)
- variable declarations
BEGIN (required)
- SQL statements
- PL/SQL statements or sub-blocks
EXCEPTION (optional)
- actions to perform when errors occur
END; (required)
PL/SQL Block Types
Anonymous
DECLARE
BEGIN
-statements
EXCEPTION
END;
Procedure
PROCEDURE <name>
IS
BEGIN
-statements
EXCEPTION
END;
Function
FUNCTION <name>
RETURN <datatype>
IS
BEGIN
-statements
EXCEPTION
END;
PL/SQL Variable Types
• Scalar (char, varchar2, number, date, etc)
• Composite (%rowtype)
• Reference (pointers)
• LOB (large objects)
Note: Non PL/SQL variables include bind variables,
host (“global”) variables, and parameters.
Plsql
Variable Naming
Conventions
– Two variables can have the same name if they are in
different blocks (bad idea)
– The variable name should not be the same as any table
column names used in the block.
PL/SQL is strongly typed
– All variables must be declared before their use.
– The assignment statement
: =
is not the same as the equality operator
=
– All statements end with a ;
PL/SQL Sample Program
Variable g_inv_value number
DECLARE
v_price number(8,2) := 10.25;
v_quantity number(8,0) := 400;
BEGIN
:g_inv_value := v_price * v_quantity;
END;
/
Print g_inv_value
/
PL/SQL Sample Program
Set serveroutput on
DECLARE
v_inv_value number(10,2);
v_price number(8,2) := 10.25;
v_quantity number(8,0) := 400;
BEGIN
v_inv_value := v_price * v_quantity;
dbms_output.put('The value is: ');
dbms_output.put_line(v_inv_value);
END;
/
PL/SQL Sample Program
(with user input)
Set serveroutput on
Accept p_price Prompt 'Enter the Price: '
DECLARE
v_inv_value number(8,2);
v_price number(8,2);
v_quantity number(8,0) := 400;
BEGIN
v_price := &p_price;
v_inv_value := v_price * v_quantity;
dbms_output.put_line('******');
dbms_output.put_line('price * quantity=');
dbms_output.put_line(v_inv_value);
END;
/ Note: PL/SQL not designed for user interface programming
PL/SQL Comments
DECLARE
v_salary number(9,2) := 40000;
BEGIN
/* this is a multi-line comment that
will be ignored by the pl/sql
interpreter */
v_salary := v_salary * 2; -- nice raise
END; -- end of program
SELECT INTO
SET SERVEROUTPUT ON
DECLARE
v_max_gpa number(3,2);
v_numstudents number(4);
v_lname students.lname%type;
v_major students.major%type;
BEGIN
select max(gpa) into v_max_gpa
from students;
DBMS_OUTPUT.PUT_LINE ('The highest GPA is '||v_max_gpa);
select count(sid) into v_numstudents
from students
where gpa = v_max_gpa;
IF v_numstudents > 1 then
DBMS_OUTPUT.PUT_LINE ('There are '||v_numstudents||' with that GPA');
ELSE
select lname, major into v_lname, v_major
from students
where gpa=v_max_gpa;
DBMS_OUTPUT.PUT_LINE ('The student name is '||v_lname);
DBMS_OUTPUT.PUT_LINE ('The student major is '||v_major);
END IF;
END;
/
Cont…..
If the SELECT statement identifies more than one row to be
fetched ,Oracle Database will raise the TOO_MANY_ROWS exception.
If the statement doesn’t identify any rows to be fetched, Oracle
Database will raise the NO_DATA_FOUND exception.
Here are some examples of using SELECT-INTO:
Get the last name for a specific employee ID (the primary key in the
employees table):
DECLARE l_last_name employees.last_name%TYPE; BEGIN SELECT
last_name INTO l_last_name FROM employees WHERE employee_id =
138; DBMS_OUTPUT.put_line ( l_last_name); END;
Fetch columns from different tables
– Fetch columns from different tables:
– DECLARE l_last_name employees.last_name%TYPE;
l_department_name departments.department_name%TYPE; BEGIN
SELECT last_name, department_name INTO l_last_name,
l_department_name FROM employees e, departments d WHERE
e.department_id=d.department_id AND e.employee_id=138;
DBMS_OUTPUT.put_line ( l_last_name || ' in ' ||
l_department_name); END;
%ROWTYPE
Set serveroutput on
DECLARE
v_student students%rowtype;
BEGIN
select * into v_student
from students
where sid='123456';
DBMS_OUTPUT.PUT_LINE (v_student.lname);
DBMS_OUTPUT.PUT_LINE (v_student.major);
DBMS_OUTPUT.PUT_LINE (v_student.gpa);
END;
/
CURSORS
– A cursor is a private set of records
– An Oracle Cursor = VB recordset = JDBC ResultSet
– Implicit cursors are created for every query made in Oracle
(predefine)
– Explicit cursors can be declared by a programmer within
PL/SQL. {jo programmer banata ha}
Cursor Attributes
– cursorname%ROWCOUNT Rows returned so far
– cursorname%FOUND One or more rows retrieved
– cursorname%NOTFOUND No rows found
– Cursorname%ISOPEN Is the cursor open
Explicit Cursor Control
– Declare the cursor
– Open the cursor
– Fetch a row
– Test for end of cursor
– Close the cursor
Note: there is a FOR LOOP available with an implicit fetch
Cursor declaration
– 1) Declaring a Cursor in the Declaration Section:
– DECLARE CURSOR emp_cur IS SELECT * FROM emp_tbl
WHERE salary > 5000;
How to access an Explicit
Cursor?
• These are the three steps in accessing the cursor.
1) Open the cursor.
2) Fetch the records in the cursor one at a time.
3) Close the cursor.
• General Syntax to open a cursor is:
• OPEN cursor_name; General Syntax to fetch records from a
cursor is:
• FETCH cursor_name INTO record_name; OR
FETCH cursor_name INTO variable_list; General Syntax to
close a cursor is:
• CLOSE cursor_name;
Using Loops with Explicit
Cursors:
• Cursor with a Simple Loop:
• 1> DECLARE
• 2> CURSOR emp_cur IS
• 3> SELECT first_name, last_name, salary FROM emp_tbl;
• 4> emp_rec emp_cur%rowtype;
• 5> BEGIN
• 6> IF NOT sales_cur%ISOPEN THEN
• 7> OPEN sales_cur;
• 8> END IF;
• 9> LOOP
• 10> FETCH emp_cur INTO emp_rec;
• 11> EXIT WHEN emp_cur%NOTFOUND;
• 12> dbms_output.put_line(emp_cur.first_name || ' ' ||emp_cur.last_name
• 13> || ' ' ||emp_cur.salary);
• 14> END LOOP;
• 15> END;
• 16> /
Cursor with a While
Loop:
• Lets modify the above program to use while loop.
• 1> DECLARE
• 2> CURSOR emp_cur IS
• 3> SELECT first_name, last_name, salary FROM emp_tbl;
• 4> emp_rec emp_cur%rowtype;
• 5> BEGIN
• 6> IF NOT sales_cur%ISOPEN THEN
• 7> OPEN sales_cur;
• 8> END IF;
• 9> FETCH sales_cur INTO sales_rec;
• 10> WHILE sales_cur%FOUND THEN
• 11> LOOP
• 12> dbms_output.put_line(emp_cur.first_name || ' ' ||emp_cur.last_name
• 13> || ' ' ||emp_cur.salary);
• 14> FETCH sales_cur INTO sales_rec;
• 15> END LOOP;
• 16> END;
Cursor with a FOR Loop:
• When using FOR LOOP you need not declare a record
or variables to store the cursor values, need not open,
fetch and close the cursor. These functions are
accomplished by the FOR LOOP automatically.
• General Syntax for using FOR LOOP:
• FOR record_name IN cusror_name
• LOOP
• process the row...
• END LOOP;
• Let’s use the above example to learn how to use for loops in cursors.
• 1> DECLARE
• 2> CURSOR emp_cur IS
• 3> SELECT first_name, last_name, salary FROM emp_tbl;
• 4> emp_rec emp_cur%rowtype;
• 5> BEGIN
• 6> FOR emp_rec in sales_cur
• 7> LOOP
• 8> dbms_output.put_line(emp_cur.first_name || ' ' ||emp_cur.last_name 9> || ' ' ||emp_cur.salary);
• 10> END LOOP;
• 11>END;
• 12> /
Sample Cursor Program
DECLARE
CURSOR students_cursor IS
SELECT * from students;
v_student students_cursor%rowtype;
/* instead we could do v_student students%rowtype */
BEGIN
DBMS_OUTPUT.PUT_LINE ('******************');
OPEN students_cursor;
FETCH students_cursor into v_student;
WHILE students_cursor%found LOOP
DBMS_OUTPUT.PUT_LINE (v_student.last);
DBMS_OUTPUT.PUT_LINE (v_student.major);
DBMS_OUTPUT.PUT_LINE ('******************');
FETCH students_cursor into v_student;
END LOOP;
CLOSE students_cursor;
END;
/
Sample Cursor Program
(same program without composite variable)
DECLARE
CURSOR students_cursor IS
SELECT last, major from students;
v_Last students.last%type;
v_major students.major%type;
BEGIN
DBMS_OUTPUT.PUT_LINE ('******************');
OPEN students_cursor;
FETCH students_cursor into v_last, v_major;
WHILE students_cursor%found LOOP
DBMS_OUTPUT.PUT_LINE (v_last);
DBMS_OUTPUT.PUT_LINE (v_major);
DBMS_OUTPUT.PUT_LINE ('******************');
FETCH students_cursor into v_last, v_major;
END LOOP;
CLOSE students_cursor;
END;
/
When is PL/SQL handy
• When something is too complicated for SQL
• When conditional branching and looping are needed
• Example
• Write a PL/SQL program that assigns email address to each employee or student in
a table. Following these rules:
- email address should be all lower case
- email address should default to first initial plus the first seven letters of the last name
- email can be no longer than eight characters
- if email is already used than use first initial plus middle initial plus first
six letters of last name
- if the previous address is taken use the first two letters of the first name
and the first six letters of the last name.
- if the previous address is taken use first six letters of last name + 01 or 02 …etc
Function
– PL/SQL user defined function stored in the database and executed when a
function call is made in code: example x := SQUARED(50)
– Example:
Create or Replace Function SQUARED
(p_number_to_square IN number)
RETURN number
IS
v_answer number(10);
BEGIN
v_answer := p_number_to_square * p_number_to_square;
RETURN(v_answer);
END;
/
SEQUENCE
CREATE SEQUENCE <sequence_name>
|INCREMENT BY <number>|
|START WITH <start_value>|
|MAXVALUE <maximum_value>|NOMAXVALUE|
|MINVALUE <minimum_value>|
|CYCLE|NOCYLE|
|CACHE <number of values>|NOCACHE|
|ORDER|NOORDER|
To pop the next sequence use:
SEQUENCENAME.NEXTVAL (CURRVAL shows last pop)

More Related Content

PPTX
4. plsql
PPT
PL/SQL Introduction and Concepts
PPTX
Introduction to PL/SQL
PPTX
5. stored procedure and functions
PPT
1 - Introduction to PL/SQL
PPTX
ORACLE PL SQL FOR BEGINNERS
PPTX
Triggers
PPTX
4. plsql
PL/SQL Introduction and Concepts
Introduction to PL/SQL
5. stored procedure and functions
1 - Introduction to PL/SQL
ORACLE PL SQL FOR BEGINNERS
Triggers

What's hot (20)

PDF
All About PL/SQL Collections
PPTX
Oracle: Control Structures
PPTX
Structured query language(sql)ppt
PPTX
PLSQL Tutorial
PPT
Oracle pl/sql control statments
PPTX
Sql operator
PPT
08 Dynamic SQL and Metadata
PDF
SQL Overview
PPTX
Packages in PL/SQL
PDF
SQL JOINS
PPT
09 Managing Dependencies
PPTX
pl/sql Procedure
PPT
PPT
Joins in SQL
PPTX
All of the Performance Tuning Features in Oracle SQL Developer
PDF
Exception handling in plsql
PDF
Oracle SQL Basics
PPTX
PL/SQL Fundamentals I
PPTX
Basic SQL and History
All About PL/SQL Collections
Oracle: Control Structures
Structured query language(sql)ppt
PLSQL Tutorial
Oracle pl/sql control statments
Sql operator
08 Dynamic SQL and Metadata
SQL Overview
Packages in PL/SQL
SQL JOINS
09 Managing Dependencies
pl/sql Procedure
Joins in SQL
All of the Performance Tuning Features in Oracle SQL Developer
Exception handling in plsql
Oracle SQL Basics
PL/SQL Fundamentals I
Basic SQL and History
Ad

Similar to Plsql (20)

PPTX
PL_SQL - II.pptx
PPT
SQL- Introduction to PL/SQL
PDF
PL-SQL.pdf
PPT
PLSQL (1).ppt
PPTX
plsql tutorialhub....
PPTX
PLSQLmy Updated (1).pptx
PPT
PDF
PPTX
PDF
PLSQL Note
PPTX
PL_SQL_1.pptx fvbxcfbhxdfgh .
PPTX
BBarters_PL_SQL overview cursor, function
PPT
10gplsqlslide-120704232925-phJKKJJKKJpapp01.ppt
PDF
Cursors
PPTX
Pl sql Prograaming of Database management system
PPTX
Pl-sql blocks and block types and variablesdeclaring.pptx
PPTX
BBarters_PL_SQL gives cdemo details.pptx
PDF
Pl sql programme
PDF
Pl sql programme
PPT
PL/SQL Stored Procedures And Cursors.ppt
PL_SQL - II.pptx
SQL- Introduction to PL/SQL
PL-SQL.pdf
PLSQL (1).ppt
plsql tutorialhub....
PLSQLmy Updated (1).pptx
PLSQL Note
PL_SQL_1.pptx fvbxcfbhxdfgh .
BBarters_PL_SQL overview cursor, function
10gplsqlslide-120704232925-phJKKJJKKJpapp01.ppt
Cursors
Pl sql Prograaming of Database management system
Pl-sql blocks and block types and variablesdeclaring.pptx
BBarters_PL_SQL gives cdemo details.pptx
Pl sql programme
Pl sql programme
PL/SQL Stored Procedures And Cursors.ppt
Ad

More from fika sweety (20)

PPTX
Query optimization and performance
PPT
Program design techniques
PPT
Shift rotate
PPTX
Graphss
PPT
Modeling and simulation ch 1
PPTX
Macros...presentation
PPT
Pseudocode algorithim flowchart
PPT
Diversity (HRM)
PPT
Howtowriteamemo 090920105907-phpapp02
PPTX
Coal presentationt
PPTX
1 Computer Architecture
PPTX
3 Pipelining
PPT
19 primkruskal
PPT
Warehouse chapter3
PPTX
Storage memory
PPT
Quick sort
PPTX
Query optimization and performance
PDF
Master theorem
PPT
Database security copy
Query optimization and performance
Program design techniques
Shift rotate
Graphss
Modeling and simulation ch 1
Macros...presentation
Pseudocode algorithim flowchart
Diversity (HRM)
Howtowriteamemo 090920105907-phpapp02
Coal presentationt
1 Computer Architecture
3 Pipelining
19 primkruskal
Warehouse chapter3
Storage memory
Quick sort
Query optimization and performance
Master theorem
Database security copy

Recently uploaded (20)

PPTX
Agentic Artificial Intelligence (Agentic AI).pptx
PDF
AIGA 012_04 Cleaning of equipment for oxygen service_reformat Jan 12.pdf
PPTX
Solar energy pdf of gitam songa hemant k
PPTX
Micro1New.ppt.pptx the mai themes of micfrobiology
PDF
Micro 3 New.ppt.pdf tools the laboratory the method
PDF
Beginners-Guide-to-Artificial-Intelligence.pdf
PPTX
Micro1New.ppt.pptx the main themes if micro
PDF
Cryptography and Network Security-Module-I.pdf
PPTX
Environmental studies, Moudle 3-Environmental Pollution.pptx
PPTX
Module1.pptxrjkeieuekwkwoowkemehehehrjrjrj
PDF
Unit I -OPERATING SYSTEMS_SRM_KATTANKULATHUR.pptx.pdf
PPTX
Principal presentation for NAAC (1).pptx
PPTX
WN UNIT-II CH4_MKaruna_BapatlaEngineeringCollege.pptx
DOCX
ENVIRONMENTAL PROTECTION AND MANAGEMENT (18CVL756)
PPTX
chapter 1.pptx dotnet technology introduction
PDF
Project_Mgmt_Institute_-Marc Marc Marc .pdf
PDF
MACCAFERRY GUIA GAVIONES TERRAPLENES EN ESPAÑOL
PPTX
Unit IImachinemachinetoolopeartions.pptx
PDF
Unit1 - AIML Chapter 1 concept and ethics
PPTX
Wireless sensor networks (WSN) SRM unit 2
Agentic Artificial Intelligence (Agentic AI).pptx
AIGA 012_04 Cleaning of equipment for oxygen service_reformat Jan 12.pdf
Solar energy pdf of gitam songa hemant k
Micro1New.ppt.pptx the mai themes of micfrobiology
Micro 3 New.ppt.pdf tools the laboratory the method
Beginners-Guide-to-Artificial-Intelligence.pdf
Micro1New.ppt.pptx the main themes if micro
Cryptography and Network Security-Module-I.pdf
Environmental studies, Moudle 3-Environmental Pollution.pptx
Module1.pptxrjkeieuekwkwoowkemehehehrjrjrj
Unit I -OPERATING SYSTEMS_SRM_KATTANKULATHUR.pptx.pdf
Principal presentation for NAAC (1).pptx
WN UNIT-II CH4_MKaruna_BapatlaEngineeringCollege.pptx
ENVIRONMENTAL PROTECTION AND MANAGEMENT (18CVL756)
chapter 1.pptx dotnet technology introduction
Project_Mgmt_Institute_-Marc Marc Marc .pdf
MACCAFERRY GUIA GAVIONES TERRAPLENES EN ESPAÑOL
Unit IImachinemachinetoolopeartions.pptx
Unit1 - AIML Chapter 1 concept and ethics
Wireless sensor networks (WSN) SRM unit 2

Plsql

  • 2. What is PL/SQL – Procedural Language – SQL – An extension to SQL with design features of programming languages (procedural and object oriented) – PL/SQL and Java are both supported as internal host languages within Oracle products.
  • 3. Why PL/SQL – Acts as host language for stored procedures and triggers. – Provides the ability to add middle tier business logic to client/server applications. – Provides Portability of code from one environment to another – Improves performance of multi-query transactions. – Provides error handling
  • 4. PL/SQL BLOCK STRUCTURE DECLARE (optional) - variable declarations BEGIN (required) - SQL statements - PL/SQL statements or sub-blocks EXCEPTION (optional) - actions to perform when errors occur END; (required)
  • 5. PL/SQL Block Types Anonymous DECLARE BEGIN -statements EXCEPTION END; Procedure PROCEDURE <name> IS BEGIN -statements EXCEPTION END; Function FUNCTION <name> RETURN <datatype> IS BEGIN -statements EXCEPTION END;
  • 6. PL/SQL Variable Types • Scalar (char, varchar2, number, date, etc) • Composite (%rowtype) • Reference (pointers) • LOB (large objects) Note: Non PL/SQL variables include bind variables, host (“global”) variables, and parameters.
  • 8. Variable Naming Conventions – Two variables can have the same name if they are in different blocks (bad idea) – The variable name should not be the same as any table column names used in the block.
  • 9. PL/SQL is strongly typed – All variables must be declared before their use. – The assignment statement : = is not the same as the equality operator = – All statements end with a ;
  • 10. PL/SQL Sample Program Variable g_inv_value number DECLARE v_price number(8,2) := 10.25; v_quantity number(8,0) := 400; BEGIN :g_inv_value := v_price * v_quantity; END; / Print g_inv_value /
  • 11. PL/SQL Sample Program Set serveroutput on DECLARE v_inv_value number(10,2); v_price number(8,2) := 10.25; v_quantity number(8,0) := 400; BEGIN v_inv_value := v_price * v_quantity; dbms_output.put('The value is: '); dbms_output.put_line(v_inv_value); END; /
  • 12. PL/SQL Sample Program (with user input) Set serveroutput on Accept p_price Prompt 'Enter the Price: ' DECLARE v_inv_value number(8,2); v_price number(8,2); v_quantity number(8,0) := 400; BEGIN v_price := &p_price; v_inv_value := v_price * v_quantity; dbms_output.put_line('******'); dbms_output.put_line('price * quantity='); dbms_output.put_line(v_inv_value); END; / Note: PL/SQL not designed for user interface programming
  • 13. PL/SQL Comments DECLARE v_salary number(9,2) := 40000; BEGIN /* this is a multi-line comment that will be ignored by the pl/sql interpreter */ v_salary := v_salary * 2; -- nice raise END; -- end of program
  • 14. SELECT INTO SET SERVEROUTPUT ON DECLARE v_max_gpa number(3,2); v_numstudents number(4); v_lname students.lname%type; v_major students.major%type; BEGIN select max(gpa) into v_max_gpa from students; DBMS_OUTPUT.PUT_LINE ('The highest GPA is '||v_max_gpa); select count(sid) into v_numstudents from students where gpa = v_max_gpa; IF v_numstudents > 1 then DBMS_OUTPUT.PUT_LINE ('There are '||v_numstudents||' with that GPA'); ELSE select lname, major into v_lname, v_major from students where gpa=v_max_gpa; DBMS_OUTPUT.PUT_LINE ('The student name is '||v_lname); DBMS_OUTPUT.PUT_LINE ('The student major is '||v_major); END IF; END; /
  • 15. Cont….. If the SELECT statement identifies more than one row to be fetched ,Oracle Database will raise the TOO_MANY_ROWS exception. If the statement doesn’t identify any rows to be fetched, Oracle Database will raise the NO_DATA_FOUND exception. Here are some examples of using SELECT-INTO: Get the last name for a specific employee ID (the primary key in the employees table): DECLARE l_last_name employees.last_name%TYPE; BEGIN SELECT last_name INTO l_last_name FROM employees WHERE employee_id = 138; DBMS_OUTPUT.put_line ( l_last_name); END;
  • 16. Fetch columns from different tables – Fetch columns from different tables: – DECLARE l_last_name employees.last_name%TYPE; l_department_name departments.department_name%TYPE; BEGIN SELECT last_name, department_name INTO l_last_name, l_department_name FROM employees e, departments d WHERE e.department_id=d.department_id AND e.employee_id=138; DBMS_OUTPUT.put_line ( l_last_name || ' in ' || l_department_name); END;
  • 17. %ROWTYPE Set serveroutput on DECLARE v_student students%rowtype; BEGIN select * into v_student from students where sid='123456'; DBMS_OUTPUT.PUT_LINE (v_student.lname); DBMS_OUTPUT.PUT_LINE (v_student.major); DBMS_OUTPUT.PUT_LINE (v_student.gpa); END; /
  • 18. CURSORS – A cursor is a private set of records – An Oracle Cursor = VB recordset = JDBC ResultSet – Implicit cursors are created for every query made in Oracle (predefine) – Explicit cursors can be declared by a programmer within PL/SQL. {jo programmer banata ha}
  • 19. Cursor Attributes – cursorname%ROWCOUNT Rows returned so far – cursorname%FOUND One or more rows retrieved – cursorname%NOTFOUND No rows found – Cursorname%ISOPEN Is the cursor open
  • 20. Explicit Cursor Control – Declare the cursor – Open the cursor – Fetch a row – Test for end of cursor – Close the cursor Note: there is a FOR LOOP available with an implicit fetch
  • 21. Cursor declaration – 1) Declaring a Cursor in the Declaration Section: – DECLARE CURSOR emp_cur IS SELECT * FROM emp_tbl WHERE salary > 5000;
  • 22. How to access an Explicit Cursor? • These are the three steps in accessing the cursor. 1) Open the cursor. 2) Fetch the records in the cursor one at a time. 3) Close the cursor. • General Syntax to open a cursor is: • OPEN cursor_name; General Syntax to fetch records from a cursor is: • FETCH cursor_name INTO record_name; OR FETCH cursor_name INTO variable_list; General Syntax to close a cursor is: • CLOSE cursor_name;
  • 23. Using Loops with Explicit Cursors: • Cursor with a Simple Loop: • 1> DECLARE • 2> CURSOR emp_cur IS • 3> SELECT first_name, last_name, salary FROM emp_tbl; • 4> emp_rec emp_cur%rowtype; • 5> BEGIN • 6> IF NOT sales_cur%ISOPEN THEN • 7> OPEN sales_cur; • 8> END IF; • 9> LOOP • 10> FETCH emp_cur INTO emp_rec; • 11> EXIT WHEN emp_cur%NOTFOUND; • 12> dbms_output.put_line(emp_cur.first_name || ' ' ||emp_cur.last_name • 13> || ' ' ||emp_cur.salary); • 14> END LOOP; • 15> END; • 16> /
  • 24. Cursor with a While Loop: • Lets modify the above program to use while loop. • 1> DECLARE • 2> CURSOR emp_cur IS • 3> SELECT first_name, last_name, salary FROM emp_tbl; • 4> emp_rec emp_cur%rowtype; • 5> BEGIN • 6> IF NOT sales_cur%ISOPEN THEN • 7> OPEN sales_cur; • 8> END IF; • 9> FETCH sales_cur INTO sales_rec; • 10> WHILE sales_cur%FOUND THEN • 11> LOOP • 12> dbms_output.put_line(emp_cur.first_name || ' ' ||emp_cur.last_name • 13> || ' ' ||emp_cur.salary); • 14> FETCH sales_cur INTO sales_rec; • 15> END LOOP; • 16> END;
  • 25. Cursor with a FOR Loop: • When using FOR LOOP you need not declare a record or variables to store the cursor values, need not open, fetch and close the cursor. These functions are accomplished by the FOR LOOP automatically. • General Syntax for using FOR LOOP: • FOR record_name IN cusror_name • LOOP • process the row... • END LOOP;
  • 26. • Let’s use the above example to learn how to use for loops in cursors. • 1> DECLARE • 2> CURSOR emp_cur IS • 3> SELECT first_name, last_name, salary FROM emp_tbl; • 4> emp_rec emp_cur%rowtype; • 5> BEGIN • 6> FOR emp_rec in sales_cur • 7> LOOP • 8> dbms_output.put_line(emp_cur.first_name || ' ' ||emp_cur.last_name 9> || ' ' ||emp_cur.salary); • 10> END LOOP; • 11>END; • 12> /
  • 27. Sample Cursor Program DECLARE CURSOR students_cursor IS SELECT * from students; v_student students_cursor%rowtype; /* instead we could do v_student students%rowtype */ BEGIN DBMS_OUTPUT.PUT_LINE ('******************'); OPEN students_cursor; FETCH students_cursor into v_student; WHILE students_cursor%found LOOP DBMS_OUTPUT.PUT_LINE (v_student.last); DBMS_OUTPUT.PUT_LINE (v_student.major); DBMS_OUTPUT.PUT_LINE ('******************'); FETCH students_cursor into v_student; END LOOP; CLOSE students_cursor; END; /
  • 28. Sample Cursor Program (same program without composite variable) DECLARE CURSOR students_cursor IS SELECT last, major from students; v_Last students.last%type; v_major students.major%type; BEGIN DBMS_OUTPUT.PUT_LINE ('******************'); OPEN students_cursor; FETCH students_cursor into v_last, v_major; WHILE students_cursor%found LOOP DBMS_OUTPUT.PUT_LINE (v_last); DBMS_OUTPUT.PUT_LINE (v_major); DBMS_OUTPUT.PUT_LINE ('******************'); FETCH students_cursor into v_last, v_major; END LOOP; CLOSE students_cursor; END; /
  • 29. When is PL/SQL handy • When something is too complicated for SQL • When conditional branching and looping are needed • Example • Write a PL/SQL program that assigns email address to each employee or student in a table. Following these rules: - email address should be all lower case - email address should default to first initial plus the first seven letters of the last name - email can be no longer than eight characters - if email is already used than use first initial plus middle initial plus first six letters of last name - if the previous address is taken use the first two letters of the first name and the first six letters of the last name. - if the previous address is taken use first six letters of last name + 01 or 02 …etc
  • 30. Function – PL/SQL user defined function stored in the database and executed when a function call is made in code: example x := SQUARED(50) – Example: Create or Replace Function SQUARED (p_number_to_square IN number) RETURN number IS v_answer number(10); BEGIN v_answer := p_number_to_square * p_number_to_square; RETURN(v_answer); END; /
  • 31. SEQUENCE CREATE SEQUENCE <sequence_name> |INCREMENT BY <number>| |START WITH <start_value>| |MAXVALUE <maximum_value>|NOMAXVALUE| |MINVALUE <minimum_value>| |CYCLE|NOCYLE| |CACHE <number of values>|NOCACHE| |ORDER|NOORDER| To pop the next sequence use: SEQUENCENAME.NEXTVAL (CURRVAL shows last pop)