2. PL/SQL is a database-oriented programming language that extends
Oracle SQL with procedural capabilities.
3. SQL also has some
disadvantages and they are:
SQL can not be used for programming because SQL does not provide the
programming techniques of condition checking, looping and branching
etc.
SQL statements are passed to Oracle engine one at a time. Thus, it
increases the traffic on the network which results in decrease of speed
of data processing.
On the occurrence of an error, the Oracle engine displays its own error
message. SQL does not allow the programmer to handle the errors.
4. Advantages of PL/SQL
PL/SQL has SQL features as well as procedural capabilities.
PL/SQL sends entire block of SQL statements to Oracle engine in one go.
Thus, it reduces the network traffic which results in an increase of
speed of data processing.
PL/SQL allows the programmers to display user-friendly error messages.
PL/SQL programs are portable i.e., these can run on any computer
hardware and operating system where Oracle is installed.
8. •Character Set
The PL/SQL character set includes:
•Upper and lower-case letters, A .. Z and a .. z
•Numerals, 0 .. 9
•Symbols, ( ) + - * / < > = ! ~ ^ ; : . ' @ % , " # $ & _ | { } ? [ ]
•Tabs and spaces
PL/SQL is not case sensitive, so lower-case letters are equivalent to
corresponding upper-case letters except within string and character literals.
10. Literals
A literal is an explicit numeric, character, string, or Boolean value that is
used to initialize the constants and variables.
Numeric Literal:
Character Literal:
String Literal:
Boolean Literal:
'Z' '%' '7' ' ' 'z' '('
11. Variable and Constant
A variable in PL/SQL is a named variable which is used to hold some
data value.
A variable name must start with a character and can be followed by a
maximum of 29 other characters.
12. Data Types
NUMBER: This data type is used to store numeric data (integers, real
numbers, and floating-point numbers).
CHAR: This data type is used to store alphanumeric data (words and
text). The CHAR datatype can have maximum size up to 32767 bytes.
VARCHAR2: This data type is used to store variable length character
data. For a VARCHAR2 that is 2000 bytes longer, PL/SQL dynamically
allocates only enough memory to hold the actual valu
DATE: This data type is used to store date and time data.
BOOLEAN: This data type is used to store TRUE, FALSE or NULL.e.
14. Assignment
Assignment operator (:=) to get the value from the user.
SELECT INTO clause to get the value from database object.
Some examples using assignment operator are:
A := 10;
B := c + d;
Sal := Salary+1000;
Example using SELECT INTO clause:
Select salary into sal from employee where empid = 12;
15. Comments
Single-line comments and
Multi-line comments
A := 5; ¬¬¬¬-- assign value 5 to variable A
A := b + c; /* the values of variables b and c are added
and result is assigned to variable A */
16. HOW TO READ A VALUE DURING RUN
TIME
Num := &Num;
When the program will execute, the system will ask to enter the value
and the user can enter any value. This is shown as follows:
Enter the value of Num: 10
17. DISPLAYING USER MESSAGE ON
THE SCREEN
DBMS_OUTPUT.PUT_LINE(‘Well Come To Computer Lab’);
DBMS_OUTPUT.PUT_LINE (A);
DBMS_OUTPUT.PUT_LINE (‘Value of A is’ || A);
19. %ROWTYPE
The %ROWTYPE attribute provides a record type that represents a row
in a table.
DECLARE
◦ dept_rec dept%ROWTYPE;
◦ dept_rec.deptno;
◦ dept_rec.deptname;
20. SOME BASIC PL/SQL PROGRAMS
Declare
Begin
dbms_output.put_line ('Hello');
End;
24. Example of %type
Declare
a emp.ta%type;
b emp.da%type;
t emp.total%type;
Begin
Select ta, da into a, b from emp where empid = 8;
t := a + b;
Update emp set total = t where empid = 8;
End;
25. Example of %rowtype
Declare
Record emp%rowtype;
Begin
Select*into Record from emp where empid = 8;
Record.total := Record.ta + Record.da;
Update emp set total=Record.total where empid = 8;
End;
26. Branching statements
Declare
num1 number(2);
num2 number(2);
Begin
num1:=&num1;
num2:=&num2;
IF num1 > num2 THEN
dbms_output.put_line('greater is num1='||num1);
ELSE
dbms_output.put_line('greater is num2='||num2);
END IF;
End;
27. Declare
num1 number(2);
num2 number(2);
num3 number(2);
Begin
num1:=&num1;
num2:=&num2;
num3:=&num3;
END IF;
End;
IF num1 > num2 THEN
IF num2 > num3 THEN
dbms_output.put_line('greater is
num1='||num1);
ELSE
dbms_output.put_line('greater is
num3='||num3);
END IF;
ELSE
IF num2 > num3 THEN
dbms_output.put_line('greater is
num2='||num2);
ELSE
dbms_output.put_line('greater is
num3='||num3);
END IF;
43. CREATE OR REPLACE TRIGGER TriggerName
BEFORE / AFTER
DELETE / INSERT / UPDATE OF
ColumnName
ON TableNamne
REFERENCING OLD AS old, NEW AS
new
FOR EACH ROW
WHEN Condition
DECLARE
Variable and Constant Declarations;
BEGIN
SQL and PL/SQL statements;
EXCEPTION
Error Handling Statements;
END;
44.
45.
46.
47. Enabling or Disabling Triggers
Syntax:
SQL> Alter Trigger TriggerName Disable;
Example:
SQL> Alter Trigger Upper Disable;
Syntax:
SQL> Alter Table Tableneme
Disable All Triggers;
Example:
SQL> Alter Table Student Disable All
Triggers;
Syntax:
SQL> Drop Trigger TriggerName;
Example:
SQL> Drop Trigger Opr;
49. A cursor is a work area where the result of a SQL query is stored at the server
side.
Declare a cursor
Open a cursor
Fetch or Read from cursor
Close a cursor
When a select statement is executed to access the data from a table then, the Oracle
engine needs a work area for query execution and to store the result of that query at
server side.
The data stored in a cursor is called as ‘active
data set’.
50. Types of Cursors
Implicit Cursor
It is a work area that is declared, opened and
closed internally by the Oracle engine. The
user is not involved in the process of managing
the cursor
Explicit Cursor
It is a work area that is declared, opened and
closed externally by the user. It is also called as
user-defined cursors.
%ISOPEN
%FOUND
%NOTFOUND
%ROWCOUNT
SQL%ISOPEN
SQL%FOUND
SQL%NOTFOUND
SQL%ROWCOUNT
51. General Cursor Attributes
Attribute Meaning
%ISOPEN Returns TRUE if cursor is open, FALSE
otherwise.
%FOUND Returns TRUE if record was fetched
successfully, FALSE otherwise.
%NOTFOUND Returns TRUE if record was not fetched
successfully, FALSE otherwise.
%ROWCOUNT Returns number of records processed from
cursor.
52. Implicit Cursor
Write a PL/SQL block to display a message that whether a record is updated or not
using SQL%FOUND and SQL%NOTFOUND.
Begin
Update student set city='pune' where rollno=&rollno;
IF SQL%FOUND THEN
dbms_output.put_line('Recor Updated');
END IF;
IF SQL%NOTFOUND THEN
dbms_output.put_line('Record not Updated');
END IF;
End;
53. Explicit Cursor
Steps in Handling Explicit Cursor
The explicit cursor handling needs following steps to be
followed:
1.Declare the cursor in the DECLARE part of PL/SQL block.
2. Open the cursor.
3. Using a loop, fetch data from cursor one row at a time into
memory variables and process the data stored in the memory
variables as required.
4.Exit from the loop after the processing is complete.
5. Close the cursor.
54. Declaring a Cursor
Syntax:
Cursor CursorName IS SELECT statement;
Here, SELECT statement can use all its clauses except INTO clause.
Example:
Cursor C IS SELECT rollno, name from student where branch=’CSE’;
56. Fetching a Record from Cursor
Syntax:
FETCH CursorName INTO Variables;
LOOP
FETCH C INTO my_record;
EXIT WHEN C%NOTFOUND;
-- Process data record
END LOOP;
FETCH C INTO my_rollno, my_name;
LOOP
FETCH C INTO my_record;
EXIT WHEN C%NOTFOUND;
-- Process data record
END LOOP;
58. Write a PL/SQL block to display the name of the students belonging to CSE branch.
Declare
Cursor C Is Select name from student where branch='cse';
my_name student.name%Type;
Begin
Open C;
LOOP
Fetch C into my_name;
Exit When C%Notfound;
dbms_output.put_line(my_name);
END LOOP;
Close C;
End;
59. Write a PL/SQL block to increase the salary of all engineers by 1000.
60. Write a PL/SQL block to increase the salary of all engineers by 1000.
Declare
Cursor C1 Is Select empid,salary from emp where job='engineer';
my_id emp.empid%Type;
my_sal emp.salary%Type;
Begin
Open C1;
LOOP
Fetch C1 into my_id,my_sal;
Exit When C1%Notfound;
Update emp set salary=salary+1000 where empid=my_id;
END LOOP;
Close C1;
End;