Professional Documents
Culture Documents
SQL : INTRODUCTION
PL/SQL
PL/SQL Blocks
Anonymous Block :
Unnamed block of PL/SQL. These do not accept any
parameters.
Procedure :
A series of statements accepting and/or returning zero or
more variables through parameters.
Function :
A series of statements accepting zero or more variables that
returns one value using an explicit RETURN statement.
Package :
A collection of procedures and functions that has two parts,
a specification listing available procedures and functions
and their parameters, and a body that contains the actual
code for the procedures and functions.
Trigger :
A series of PL/SQL statements attached to a database table
that execute whenever a triggering event (select, update,
insert, delete) occurs.
PL/SQL
PL/SQL
PL/SQL
When the PL/SQL engine is located on the
client, as it is in the Oracle Developer
Tools, the PL/SQL processing is done on the
client side.
All SQL statements that are embedded
within the PL/SQL block are sent to the
Oracle server for further processing.
When PL/SQL block contains no SQL
statement, the entire block is executed on
the client side.
Benefits of PL/SQL
Integration
Improved Performance
Modularize Program Development
Portability
Identifiers can be used
Procedural Language Control Structures
Exception/Error handling
Application
Application
SQL
SQL
Other
Other DBMSs
DBMSs
SQL
Application
Application
SQL
IF...THEN
SQL
ELSE
SQL
END IF;
SQL
Oracle
Oracle with
with
PL/SQL
PL/SQL
PL/SQL BLOCKS
Named blocks
subroutines.
are
used
when
creating
they cannot be
referenced later.
stored
in
the
database
and
BEGIN
EXCEPTION
END;
BEGIN --mandatory
SQL statements
PL/SQL statements
EXCEPTION --optional
Actions to perform when
errors occur
END;
DECLARATION SECTION
Use of Variables
With PL/SQL you can declare variables
and then use them in SQL and procedural
statements anywhere an expression can
be used.
Temporary storage of data
Manipulation of stored values
Reusability.
Ease of maintenance
Declare
Declare
v_hiredate
DATE;
v_hiredate
DATE;
v_deptno
NUMBER(2)
v_deptno
NUMBER(2) NOT
NOT NULL
NULL :=
:= 10;
10;
v_city
v_city
c_comm
c_comm
v_gender
v_gender
VARCHAR2(6)
VARCHAR2(6) :=
:= 'FEMALE';
'FEMALE';
VARCHAR2(10);
VARCHAR2(10);
CONSTANT
CONSTANT NUMBER
NUMBER :=
:= 1400;
1400;
identifier
identifier :=
:= expr;
expr;
Set v_hiredate to a date
v_hiredate
v_hiredate :=
:= '31-DEC-2012';
'31-DEC-2012';
EXECUTABLE SECTION
EXCEPTION-HANDLING SECTION
syntax checking,
binding and
p-code generation.
PL/SQL IN SQL*PLUS
SQL*Plus is an interactive tool that allows
you to type SQL or PL/SQL statements at
the command prompt.
These statements are then sent to the
database. Once they are processed, the
results are sent back from the database
and displayed on the screen.
There are some differences between
entering SQL and PL/SQL statements.
SQL EXAMPLE
SELECT first_name, last_name
FROM student;
PL/SQL EXAMPLE
DECLARE
v_first_name VARCHAR2(35);
v_last_name VARCHAR2(35);
BEGIN
SELECT first_name, last_name
INTO v_first_name, v_last_name
FROM student
WHERE student_id = 123;
DBMS_OUTPUT.PUT_LINE
('Student name: '||v_first_name||' '||v_last_name);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE
('There is no student with student id 123');
END;
.
/
PL/SQL EXAMPLE
GENERATING OUTPUT
GENERATING OUTPUT
Step 1 Before executing any PL/SQL program,
type the following command at the SQL prompt
(Note: you need to type in this command only
once for every SQL*PLUS session):
SQL>
GENERATING OUTPUT
Step 2 use DBMS_OUTPUT.PUT_LINE in your
Simply prints
Hello world
on screen
BEGIN
DBMS_OUTPUT.PUT_LINE(Today is || SYSDATE );
END;
DECLARE
v_name varchar2(20);
eI
l
b
ia
Var
ion
t
a
aliz
i
t
i
n
BEGIN
v_name := Ali;
DBMS_OUTPUT.PUT_LINE(Hello || v_name);
Task: Write an
anonymous block
to print Hello Ali
on screen.
Declare name as
a variable
END;
DECLARE
Variable declared
and initialized at
declaration
v_name
Ali;
v_namevarchar2(20)
varchar2(20) :=
DEFAULT
Ali;
BEGIN
DBMS_OUTPUT.PUT_LINE(Hello || v_name);
END;
SUBSTITUTIONVARIABLES
DECLARE
v_name varchar2(20);
BEGIN
v_name := &your_name;
DBMS_OUTPUT.PUT_LINE(Hello || v_name);
END;
Keyboard entry
Output
Enter value for your_name: Veli
Old
4:
v_name := &your_name
New
4:
v_name := Veli
Hello Veli
EXAMPLE
DECLARE
v_student_id NUMBER := &sv_student_id;
v_first_name VARCHAR2(35);
v_last_name VARCHAR2(35);
BEGIN
SELECT first_name, last_name
INTO v_first_name, v_last_name
FROM student
WHERE student_id = v_student_id;
DBMS_OUTPUT.PUT_LINE
('Student name: '||v_first_name||' '||v_last_name);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('There is no such student');
END;
EXAMPLE
EXAMPLE
BEGIN
DBMS_OUTPUT.PUT_LINE('Today is ||&sv_day');
DBMS_OUTPUT.PUT_LINE('Tomorrow will be || &sv_day');
END;
This example produces the following output:
Enter value for sv_day: Monday
old 2: DBMS_OUTPUT.PUT_LINE('Today is || &sv_day');
new 2: DBMS_OUTPUT.PUT_LINE('Today is || Monday');
Enter value for sv_day: Tuesday
old 3: DBMS_OUTPUT.PUT_LINE('Tomorrow will be || &sv_day');
new 3: DBMS_OUTPUT.PUT_LINE('Tomorrow will be || Tuesday');
Today is Monday
Tomorrow will be Tuesday
PL/SQL procedure successfully completed.
EXAMPLE
EXAMPLE
EXAMPLE
BEGIN
DBMS_OUTPUT.PUT_LINE('Today is '||'&&sv_day');
DBMS_OUTPUT.PUT_LINE('Tomorrow will be ||
&sv_day');
END;
OUTPUT
Enter value for sv_day: Monday
old 2: DBMS_OUTPUT.PUT_LINE('Today is || &&sv_day');
new 2: DBMS_OUTPUT.PUT_LINE('Today is || Monday');
old 3: DBMS_OUTPUT.PUT_LINE('Tomorrow will be ||
&sv_day');
new 3: DBMS_OUTPUT.PUT_LINE('Tomorrow will be ||
Monday');
Today is Monday
Tomorrow will be Monday
PL/SQL procedure successfully completed.
Substitution Variables
Substitution Variables
IF STATEMENT
Syntax
IF
IF condition
condition THEN
THEN
statements;
statements;
[ELSIF
[ELSIF condition
condition THEN
THEN
statements;]
statements;]
[ELSE
[ELSE
statements;]
statements;]
END
END IF;
IF;
== ITEC'
ITEC' THEN
THEN
35;
35;
DECLARE
v_current_date date := SYSDATE;
BEGIN
IF to_char(v_current_date, d) in (1,7) THEN
dbms_output.put_line(weekend);
END IF;
END;
BEGIN
IF to_char(sysdate, d) in (1,7) THEN
dbms_output.put_line(weekend);
ELSE
dbms_output.put_line(weekday);
END IF;
END;
BEGIN
IF to_char(sysdate, d) in (1,7) THEN
dbms_output.put_line(week end);
ELSIF to_char(sysdate,d) in (3,5) THEN
dbms_output.put_line(we have class);
ELSE
dbms_output.put_line(no class);
END IF;
END;