PLSQL Introduction Final
PLSQL Introduction Final
Introduction
The PL/SQL programming language was developed by Oracle Corporation in the late 1980s as procedural extension language for SQL and the Oracle relational database.
PL/SQL is a completely portable, high-performance transaction-processing language. PL/SQL provides a built-in interpreted and OS independent programming environment. PL/SQL can also directly be called from the command-line SQL*Plus interface. PL/SQL's general syntax is based on that of ADA and Pascal programming language.
Features of PL/SQL
PL/SQL is tightly integrated with SQL. It offers extensive error checking. It offers numerous data types. It offers a variety of programming structures. It supports structured programming through functions and procedures. It supports object oriented programming. It supports developing web applications and server pages.
Features of PL/SQL
SQL is the standard database language and PL/SQL is strongly integrated with SQL.
PL/SQL supports both static and dynamic SQL.
Static SQL supports DML operations and transaction control from PL/SQL block. Dynamic SQL is SQL allows embedding DDL statements in PL/SQL blocks.
Features of PL/SQL
PL/SQL allows sending an entire block of statements to the database at one time.
This reduces network traffic and provides high performance for the applications.
Features of PL/SQL
PL/SQL give high productivity to programmers as it can query, transform, and update data in a database. PL/SQL saves time on design and debugging by strong features, such as exception handling, encapsulation, data hiding, and object-oriented data types.
Features of PL/SQL
Applications written in PL/SQL are fully portable. PL/SQL provides access to predefined SQL packages. PL/SQL provides support for Object-Oriented Programming. PL/SQL provides support for Developing Web Applications and Server Pages.
PL/SQL execution
Procedure
PROCEDURE <name> IS BEGIN -statements EXCEPTION END;
Function
FUNCTION <name> RETURN <datatype> IS BEGIN -statements EXCEPTION END;
Declaring a Constant
PI CONSTANT NUMBER := 3.141592654; DECLARE -- constant declaration
Assignment
1. :=
A:=10; Sum:=A+B+C; 2. Get value from data base object. SELECT INTO Select salary into SAL from employee where empid=12;
Character Literals
String Literals
BOOLEAN Literals
Date and Time Literals
PL/SQL Operators
Oper Description ator + * / ** Adds two operands Subtracts second operand from the first Multiply both operands Divide numerator by de-numerator Exponentiation operator, raises one operand to the power of other
Example
A + B will give 15 A - B will give 5 A * B will give 50 A / B will give 2 A ** B will give 100000
Relational
Operato Description r
= != <> ~= > Example
Checks if the value of two operands is equal or not, if yes (A = B) is not true. then condition becomes true.
Checks if the value of two operands is equal or not, if values are not equal then condition becomes true. Checks if the value of left operand is greater than the value of right operand, if yes then condition becomes true. Checks if the value of left operand is less than the value of right operand, if yes then condition becomes true. Checks if the value of left operand is greater than or equal to the value of right operand, if yes then condition becomes true. Checks if the value of left operand is less than or equal to the value of right operand, if yes then condition becomes true. (A != B) is true.
<
(A < B) is true.
>=
<=
(A <= B) is true.
Comparison Operators
Operator Description Example
LIKE
The LIKE operator compares a character, string, or If 'Zara Ali' like 'Z% A_i' returns a CLOB value to a pattern and returns TRUE if the value Boolean true, whereas, 'Nuha Ali' like matches the pattern and FALSE if it does not. 'Z% A_i' returns a Boolean false. If x = 10 then, x between 5 and 20 The BETWEEN operator tests whether a value lies in returns true, x between 5 and 10 a specified range. x BETWEEN a AND b means that x returns true, but x between 11 and >= a and x <= b. 20 returns false. The IN operator tests set membership. x IN (set) means that x is equal to any member of set. If x = 'm' then, x in ('a', 'b', 'c') returns boolean false but x in ('m', 'n', 'o') returns Boolean true. If x = 'm', then 'x is null' returns Boolean false.
BETWEE N
IN
IS NULL
The IS NULL operator returns the BOOLEAN value TRUE if its operand is NULL or FALSE if it is not NULL. Comparisons involving NULL values always yield NULL.
Logical Operators
Operat Description or
Example
and
Called logical AND operator. If both the operands are true then condition becomes true.
(A and B) is false.
or
Called logical OR Operator. If any of the two operands is true then condition becomes true.
(A or B) is true.
not
Called logical NOT Operator. Used to reverse the logical state of its operand. If a condition is true then Logical NOT operator will make it false.
PL/SQl Comments
A:=5; -- assign value 5 to variable A. A:=b+c; /* the value of variable A and B are added and assign to variable A */
Example Prog
DECLARE message varchar2(30):= 'Hello World; BEGIN dbms_output.put_line(message); END;
Out Put
SQL> Set Serveroutput ON; dbms_output.put_line(A); dbms_output.put_line(Value of A is: || A);
Declare
a number(2); b number (2); c number(2); Begin
Declare
a number(2); b number (2); c number(2); Begin
emp table
Emp_name Emp_id TA DA Total Branch_City
abc
xyz
10
12
1200
1100
1345
1200
2545
2300
Delhi
Mumbai
Declare a number(5); b number(5); t number(5); Begin select ta,da,into a,b from emp where empid=12; t:=a+b; update emp set total =t where empid=12; end;
Emp_name A kumar
City Delhi
Contact_number 9872177002
%TYPE
Provide the data type of a variable or column. Exp:
sal employee.salary%TYPE;
%ROWTYPE
Declare dept_rec dept%ROWTYPE; -- declaring record veriable.
detp_rec.deptno; dept_rec.deptname; -- accessing coloums
%ROWTYPE has all properties of %TYPE and one additional that we required only one variable to access any number of columns.
emp table
Emp_name Emp_id TA DA Total Branch_City
abc
xyz
10
12
1200
1100
1345
1200
2545
2300
Delhi
Mumbai
Declare a emp.ta%TYPE; b emp.td%TYPE; t emp.total%TYPE; Begin Select ta,da into a,b from emp where emp_id=12; t=a+d; Update emp set total =t where empid=12; End;
Declare Record1 emp%ROWTYPE; Begin Select * into record1 from emp where empid=12; Record1.total=record1.ta+record1.da; Update emp set total=record1.total where emp1=12; End;
Control statements
Conditional / selection Iterative Sequence
Conditional / selection
IF condition then
Sequence of statements; End if;
IF condition then
Sequence of statements; Else Sequence of statements; End if;
IF condition1 then
Sequence of statements; Else if condition2 then Sequence of statements; Else Sequence of statements; End if;
Declare Num1 number(2); Num2 number(2); Begin Num1=&num1; Num2=&num2; If num1>num2 then dbms_output.put_line(greater number is:= || num1); Else dbms_output.put_line(greater number is:= || num2); End if End;
Iterative
Loop While loop For-loop
Decalre I number(2); Begin i:=1; Loop Dbmas_output.put.line(i); i:=i+1; Exit when i>10; End loop; End;
Declare A number(2); Begin A:=1; While a<=10; Loop Dbms_output.put_line(a*a); A:=a+1; End loop; End;
For loop
For counter in [reverse] lower bound..higher bound Loop Sequence of statements; End loop;
Declare Total number(4); I number(2); Begin For I in i..10 Loop Total:=2*I; Dbms_output.put_line(2*||i||=||total); End loop; End;
goto
Delare Num1 number(2); Num2 number(2); Begin Num1:=&num1; Num2:=&num2; If num1> num2 then Goto p1; Else Goto p2; End if; <<p1>> Dbms_output.puy_line(num1 is bigger; <<p2>> Dbms_output.puy_line(num2 is bigger); End;
Triggers
Stored procedures that automatically executed when some event occurs to data base. Events are
Insert Delete Update
Trigger vs procedures
Triggers do not accept parameters. Triggers are executed automatically with user calling.
Parts of trigger
Triggering event or statement Trigger restriction
Is boolean value true or false.
Trigger action
Types of triggers
Row trigger
Fired for each row effected by trigger statement.
Statement trigger
Fired once for triggering statements regardless of number of rows effected.
AFTER trigger
Trigger executes its trigger action after the triggering statement
Create or replace trigger t11 BEFORE/AFTER DELETE/INSERT/UPDATE of column name On table REFFERENCING OLD AS old, NEW AS new For each row When condition Declare Variable declarations Begin Statements Exception Error handling statements End;
Create PL/SQL trigger which will tell about the operation performed on database.
Create or replace trigger t11 Before INSERT or UPDATE or DELETE ON Student Begin IF INSERTING then Dbms_output.put_line(operation performed inserting); ELSEIF UPDATING then Dbms_output.put_line(operation performed Updating); ELSE Dbms_output.put_line(operation performed Deletion); End if; End;
Create PL/SQL trigger which will convert the name of the student to uppercase before inserting or updating the name column of student database.
Create or replace trigger t12 Before INSERT or UPDATE of NAME ON Student For each row Begin :NEW.NAME:=UPPER(:NEW.NAME); End;
Create PL/SQL trigger which will delete the detail of the employee from employee table when particular branch is deleted from database.
Create of replace trigger t22 Before delete On employee For each row Begin
Delete from employee where branch_id= :OLD.branch_id;
End;
Cursors
A cursor is a work area where the result of a SQL query is stored at server side. Known as active data set
Declare a cursor Open a cursor Read from a cursor Close cursor
Types of cursors
Implicit cursor Explicit cursor ( user defined)
Define in DECLARE section of PL/SQL block
Cursor attributes
%ISOPEN %FOUND %NOTFOUND %ROWCOUNT
Implicit cursors
SQL%ISOPEN SQL%FOUND SQL%NOTFOUND SQL%ROWCOUNT
Write a PL/SQL block to display a message that whether a record is updated or not.
Begin Update student set city = delhi where rollono=&rollno; If SQL%FOUND then Dbms_output.put_line(record updated); End if; If SQL%NOTFOUND then Dbms_output.put_line(record not updated); End if; End;
Write a PL/SQL block to count the number of rows affected by an update statement.
Declare Num number(2); Begin Update student set grade =b where grade =c; Num:=SQL%ROWCOUNT; Dbms_output.put_line(total rows affected = || num); End;
Explicit cursors
%ISOPEN %FOUND %NOTFOUND %ROWCOUNT
Steps of execution
Declare the cursor Open the cursor Using loop, fetch the data from cursor one row at a time and store in memory variable Exit from the loop Close the cursor
Cursor cursorname IS select statements. Cursor C123 IS select rollno,name from student where branch=CSE;
Loop FETCH C123 into MY_record; Exit when C123%notfound; Other statements; End loop;
Write a PL/SQL cursor to display the name of the students belonging to CSE branch
Declare Cursor C123 is select name from student where branch =CSE; my_name student.name%type; Begin Open C123; Loop Fetch C123 into my_name; Exit when C123%NotFound; dbms_output.put_line(my_name); End loop; Close C123; End;
Subprograms
Functions Procedures Stored procedures
Modularity Reusability
Declare Global variables declaration; Procedure procedure name (Arguments IN/OUT/IN OUT data types) IS/AS Variable and constant declaration; Begin PL/SQL statements; Exception Statements; End procedure name; Begin Executable statements; Procedure calling; End;
Declare Num1 number(2); Num2 number(2); Mul number(4); Procedure multiplication(num1 IN numer,num2 IN number,Mul OUT number)IS Begin Mul:= num1*num2; End multiplication; Begin Num1:=&num1; Num2:=&num2; Multiplication (num1,num2,mul); Dbms_output.put_line(mul); End;
Stored procedures
Create or replace procedure addition(num1 IN number, num2 IN number, sun OUT number) IS Begin Sum:=num1+num2; End;
Declare Num1 number(2); Num2 number(2); Sum number(4); Begin Num1:=&num1; Num2:=&num2; sum (num1,num2,sum); Dbms_output.put_line(sum); End;
Functions
Declare Num1 number(2); Num2 number(2); Mul number(4); function multiplication(num1 IN numer,num2 IN number,Mul OUT number) Return number IS Begin Mul:= num1*num2; Return(Mul); End multiplication; Begin Num1:=&num1; Num2:=&num2; Multiplication (num1,num2,mul); Dbms_output.put_line(mul); End;