0% found this document useful (0 votes)
68 views16 pages

Programming in Oracle With PL/SQL

The document provides an overview of PL/SQL including: 1) PL/SQL allows using programming tools like loops and conditions with SQL. 2) PL/SQL code is organized into blocks that can be anonymous or named. 3) Variables are declared in PL/SQL using datatypes like numbers and strings. Cursors allow iterating over query results.

Uploaded by

Nikhil Sugandh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
68 views16 pages

Programming in Oracle With PL/SQL

The document provides an overview of PL/SQL including: 1) PL/SQL allows using programming tools like loops and conditions with SQL. 2) PL/SQL code is organized into blocks that can be anonymous or named. 3) Variables are declared in PL/SQL using datatypes like numbers and strings. Cursors allow iterating over query results.

Uploaded by

Nikhil Sugandh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 16

Oracle SQL

Programming in Oracle
with PL/SQL

Procedural Language Extension SQL


to

DCIPL, Pune, India 0


PL/SQL

Allows using general programming tools with SQL,


for example: loops, conditions, functions, etc.

This allows a lot more freedom than general SQL,


and is lighter-weight than JDBC.

We write PL/SQL code in a regular file, for example


PL/SQL, and load it with @PL in the sqlplus console.

DCIPL, Pune, India 1


PL/SQL Blocks
PL/SQL code is built of Blocks, with a unique
structure.

There are two types of blocks in PL/SQL:


1. Anonymous Blocks: have no name (like scripts)
can be written and executed immediately in SQLPLUS
can be used in a trigger

2. Named Blocks:
Procedures
Functions

DCIPL, Pune, India 2


Anonymous Block Structure:
DECLARE (optional)
/* Here you declare the variables you will use in this block */

BEGIN (mandatory)
/* Here you define the executable statements (what the block DOES!)*/

EXCEPTION (optional)
/* Here you define the actions that take place if an exception is thrown during
the run of this block */

END; (mandatory)

/
Always put a new line with only a / at the end A correct completion of a block will generate
of a block! (This tells Oracle to run the block) the following message:
PL/SQL procedure successfully completed
DCIPL, Pune, India 3
DCIPL, Pune, India 4
DECLARE

Syntax
identifier [CONSTANT] datatype [NOT NULL]
[:= | DEFAULT expr];

Notice that PL/SQL


Examples includes all SQL types,
and more…
Declare
birthday DATE;
age NUMBER(2) NOT NULL := 27;
name VARCHAR2(13) := 'Levi';
magic CONSTANT NUMBER := 77;
valid BOOLEAN NOT NULL := TRUE;

DCIPL, Pune, India 5


Declaring Variables with the
%TYPE Attribute

Accessing column’s name in


Examples table Sailors
DECLARE
sname Sailors.sname%TYPE;
fav_boat VARCHAR2(30);
my_fav_boat fav_boat%TYPE := 'Pinta';
...
Accessing another variable

DCIPL, Pune, India 6


Declaring Variables with the
%ROWTYPE Attribute
Declare a variable with the type of a
ROW of a table. Accessing
table Reserves

reserves_record Reserves%ROWTYPE;

And how do we access the fields in


reserves_record?
reserves_record.sid :=9;
Reserves_record.bid :=877;
DCIPL, Pune, India 7
Creating a PL/SQL Record
A record is a type of variable which we can define (like
‘struct’ in C or ‘object’ in Java)
DECLARE
TYPE sailor_record_type IS RECORD
(sname VARCHAR2(10),
sid VARCHAR2(9),
age NUMBER(3),
rating NUMBER(3));
sailor_record sailor_record_type;
...
BEGIN
Sailor_record.sname:=‘peter’;
Sailor_record.age:=45;

DCIPL, Pune, India 8
Creating a Cursor
We create a Cursor when we want to go over a
result of a query (like ResultSet in JDBC)

Syntax Example:
sailorData is a
DECLARE variable that can
hold a ROW from

cursor c is select * from sailors; the sailors table

sailorData sailors%ROWTYPE;

BEGIN Here the first row


of sailors is

open c; inserted into


sailorData

fetch c into sailorData;

DCIPL, Pune, India 9


Example
RAD_VALS DECLARE
Pi constant NUMBER(8,7) := 3.1415926;
radius area NUMBER(14,2);
cursor rad_cursor is select * from RAD_VALS;
3
Rad_cursor rad_value rad_cursor%ROWTYPE;

f BEGIN
e 6 open rad_cursor;
fetch rad_cursor into rad_val;
t
c 8 area:=pi*power(rad_val.radius,2);
insert into AREAS values (rad_val.radius, area);
h close rad_cursor;
END;
Rad_val /

AREAS
Radius Area
3 28.27
DECLARE DECLARE
… …
cursor rad_cursor is select * from RAD_VALS; cursor rad_cursor is select * from RAD_VALS;
rad_value rad_cursor%ROWTYPE; rad_value RAD_VALS.radius%TYPE;
BEGIN BEGIN
open rad_cursor; open rad_cursor;
fetch rad_cursor into rad_val; fetch rad_cursor into rad_val;
area:=pi*power(rad_val.radius,2); area:=pi*power(rad_val,2);
insert into AREAS values (rad_val.radius, insert into AREAS values (rad_val, area);
area); …

DECLARE DECLARE
… …
cursor rad_cursor is select * from RAD_VALS; cursor rad_cursor is select radius from
rad_value RAD_VALS%ROWTYPE; RAD_VALS;
BEGIN rad_value RAD_VALS.radius%TYPE;
open rad_cursor; BEGIN
fetch rad_cursor into rad_val; open rad_cursor;
area:=pi*power(rad_val.radius,2); fetch rad_cursor into rad_val;
insert into AREAS values (rad_val.radius, area:=pi*power(rad_val,2);
area); insert into AREAS values (rad_val, area);
… …
Explicit Cursor Attributes

Obtain status information about a


cursor
Attribute Type Description
%ISOPEN Boolean Evaluates to TRUE if the cursor
is open.
%NOTFOUND Boolean Evaluates to TRUE if the most
recent fetch does not return a row.
%FOUND Boolean Evaluates to TRUE if the most
recent fetch returns a row;
complement of %NOTFOUND
%ROWCOUNT Number Evaluates to the total number of
rows returned so far
SELECT Statements
DECLARE
v_sname VARCHAR2(10);
v_rating NUMBER(3);
BEGIN
SELECT sname, rating
INTO v_sname, v_rating
FROM Sailors
WHERE sid = '112';
END;
/

INTO clause is required.


Query must return exactly one row.
Otherwise, a NO_DATA_FOUND or
TOO_MANY_ROWS exception is thrown
Conditional logic
Condition: Nested conditions:

If <cond> If <cond>
then <command> then
elsif <cond2> if <cond2>
then <command2> then
else <command1>
<command3> end if;
end if; else <command2>
end if;
IF-THEN-ELSIF Statements

...
IF rating > 7 THEN
v_message := 'You are great';
ELSIF rating >= 5 THEN
v_message := 'Not bad';
ELSE
v_message := 'Pretty bad';
END IF;
...

You might also like