PL-SQL
PL-SQL
PL/ SQL :
BLOCK STRUCTURE
DECLARE [OPTIONAL]
→ VARIABLE DECLARATION, CURSORS, USER DEFINED EXCEPTIONS
BEGIN [MANDATORY]
→ DML, TCL
→ SELECT … INTO CLAUSE
→ CONDITIONAL , CONTROL STMNTS;
EXCEPTION [OPTIONAL]
→ HANDLING RUNTIME ERRORS
END; [MANDATORY]
1. ANONYMOUS BLOCK
2. NAMED BLOCK
ANONYMOUS BLOCK :
EX: DECLARE
—---
BEGIN
—--
END;
NAMED BLOCK:
DECLARING A VARIABLE:
EX:
DECLARE
A NUMBER(20);
B VARCHAR(30);
SYNTAX:
VARIABLE_NAME := VALUE;
EX:
A := 10;
B := ‘VIKAS’;
DISPLAY A MESSAGE:
SYNTAX:
DBMS_OUTPUT.PUT_LINE(‘MESSAGE’);
OR
DBMS_OUTPUT.PUT_LINE(VARIABLE_NAME);
DBMS_OUTPUT ⇒ PACKAGE_NAME
PUT_LINE ⇒ PROCEDURE_NAME
EX:
SET SERVEROUTPUT ON
BEGIN
DBMS_OUTPUT.PUT_LINE(‘VIKAS’);
END;
/
EX:
DECLARE
A NUMBER(20);
B NUMBER(20);
C NUMBER(20);
BEGIN
A:= 20;
B := 30;
C := A+B;
DBMS_OUTPUT.PUT_LINE(C);
END;
/
SELECT ….. INTO CLAUSE
SYNTAX:
DECLARE
A VARCHAR(20);
B NUMBER(20);
BEGIN
SELECT JOB, DEPTNO INTO A,B
FROM EMP
WHERE ENAME = 'MILLER';
DBMS_OUTPUT.PUT_LINE(A||' '||B||' ');
END;
DECLARE
A VARCHAR(20);
BEGIN
SELECT MAX(SAL) INTO A
FROM EMP;
DBMS_OUTPUT.PUT_LINE('THE MAXIMUM SALARY IS : '||A);
END;
VARIABLE ATTRIBUTES (ANCHOR NOTATION) :
SYNTAX:
VAR_NAME TABLE_NAME.COL_NAME%TYPE;
DECLARE
V_ENAME EMP.ENAME%TYPE;
V_HIREDATE EMP.HIREDATE%TYPE;
BEGIN
SELECT ENAME, HIREDATE INTO V_ENAME, V_HIREDATE
FROM EMP
WHERE ENAME = 'SCOTT';
DBMS_OUTPUT.PUT_LINE(V_ENAME||' '||V_HIREDATE);
END;
/
SYNTAX:
VAR_NAME TABLE_NAME%ROWTYPE;
EX:
I EMP%ROWTYPE;
1] WRITE A PL/SQL PROGRAM TO DISPLAY NAME, DESIGNATION,
DEPTNO OF KING.
DECLARE
I EMP%ROWTYPE;
BEGIN
SELECT ENAME, JOB, DEPTNO INTO I.ENAME, I.JOB, I.DEPTNO
FROM EMP
WHERE ENAME = 'KING';
DBMS_OUTPUT.PUT_LINE(I.ENAME||' '||I.JOB||' '||I.DEPTNO);
END;
/
CONDITIONAL STATEMENTS:
1. If
2. If-else
3. elsif
1] if:
SYNTAX:
If condition then
Stmts;
end if;
2] if-else:
SYNTAX:
If condition then
Stmts;
Else
Stmts;
end if;
2] elsif:
SYNTAX:
If condition 1 them
Stmts;
elsif condition 2 then
Stmts;
elsif condition 3 then
Stmts;
…
else
Stmts;
end if;
DECLARE
I DEPT%ROWTYPE;
BEGIN
SELECT * INTO I
FROM DEPT
WHERE DEPTNO =&DEPTNO;
IF I.DEPTNO = 10 THEN
DBMS_OUTPUT.PUT_LINE('THE DEPT NAME IS :'|| I.DNAME);
END IF;
END;
/
DECLARE
I DEPT%ROWTYPE;
BEGIN
SELECT * INTO I
FROM DEPT
WHERE DEPTNO =&DEPTNO;
IF I.DEPTNO = 10 THEN
DBMS_OUTPUT.PUT_LINE('THE DEPT NAME IS :'|| I.DNAME);
ELSE
DBMS_OUTPUT.PUT_LINE('INSERT VALID DEPTNO');
END IF;
END;
/
SQL> /
Enter value for deptno: 20
old 6: WHERE DEPTNO =&DEPTNO;
new 6: WHERE DEPTNO =20;
INSERT VALID DEPTNO
DECLARE
I DEPT%ROWTYPE;
BEGIN
SELECT * INTO I
FROM DEPT
WHERE DEPTNO =&DEPTNO;
IF I.DEPTNO = 10 THEN
DBMS_OUTPUT.PUT_LINE('THE DEPT NAME IS :'|| I.DNAME);
ELSIF I.DEPTNO = 20 THEN
DBMS_OUTPUT.PUT_LINE('THE LOC IS :'|| I.LOC);
ELSIF I.DEPTNO = 30 THEN
DBMS_OUTPUT.PUT_LINE('THE DEPTNO IS :'|| I.DEPTNO);
ELSE
DBMS_OUTPUT.PUT_LINE(I.DNAME||' '||I.LOC||' '||I.DEPTNO);
END IF;
END;
CASE STATEMENT :
SYNTAX:
CASE VARIABLE_NAME
WHEN VALUE 1 THEN
STMT;
WHEN VALUE 2 THEN
STMT;
…
WHEN VALUE N THEN
STMT;
ELSE STMT N;
END CASE;
DECLARE
V_DEPTNO NUMBER(10);
BEGIN
SELECT DEPTNO INTO V_DEPTNO
FROM DEPT
WHERE DEPTNO = &DEPTNO;
CASE V_DEPTNO
WHEN 10 THEN
DBMS_OUTPUT.PUT_LINE('TEN');
WHEN 20 THEN
DBMS_OUTPUT.PUT_LINE('TWENTY');
WHEN 30 THEN
DBMS_OUTPUT.PUT_LINE('THIRTY');
ELSE
DBMS_OUTPUT.PUT_LINE('ENTER VALID NUMBER');
END CASE;
END;
/
SYNTAX:
CASE
WHEN CONDITION 1 THEN
STMTS;
WHEN CONDITION 2 THEN
STMTS;
..
WHEN CONDITION N THEN
STMTS;
ELSE
STMTS;
END CASE;
1] WRITE A PL SQL PROGRAM IF USER INSERTING THE DEPTNO 10 OR
20 0R 30 DISPLAY THE VALUE IN ALPHABETS.
DECLARE
V_DEPTNO NUMBER(10);
BEGIN
SELECT DEPTNO INTO V_DEPTNO
FROM DEPT
WHERE DEPTNO = &DEPTNO;
CASE
WHEN V_DEPTNO=10 THEN
DBMS_OUTPUT.PUT_LINE('TEN');
WHEN V_DEPTNO=20 THEN
DBMS_OUTPUT.PUT_LINE('TWENTY');
WHEN V_DEPTNO=30 THEN
DBMS_OUTPUT.PUT_LINE('THIRTY');
ELSE
DBMS_OUTPUT.PUT_LINE('ENTER VALID NUMBER');
END CASE;
END;
/
PL/SQL HAS FOLLOWING 3 TYPES OF LOOPS:
1. SIMPLE LOOP
2. WHILE LOOP
3. FOR LOOP
SIMPLE LOOP:
SYNTAX:
LOOP
STMTS;
END LOOP;
EX:
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE(‘HI’);
END LOOP;
END;
/
NOTE: IF WE WANT TO EXIT FROM INFINITE LOOP THEN WE ARE
USING ORACLE PROVIDED PREDEFINED METHODS.
SYNTAX :
EX:
DECLARE
A NUMBER(10) := 1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE(A);
EXIT WHEN A>=10;
A := A+1;
END LOOP;
END;
/
SYNTAX:
DECLARE
A NUMBER(10) := 1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE(A);
IF A >= 10 THEN
EXIT;
END IF;
A := A+1;
END LOOP;
END;
/
WHILE LOOP:
SYNTAX:
WHILE(CONDITION)
LOOP
STMTS;
END LOOP;
EX:
DECLARE
A NUMBER(10) := 1;
BEGIN
WHILE A<= 10
LOOP
DBMS_OUTPUT.PUT_LINE(A);
A := A+1;
END LOOP;
END;
/
FOR LOOP:
SYNTAX:
EX:
DECLARE
A NUMBER(10) ;
BEGIN
FOR I IN 1..10
LOOP
DBMS_OUTPUT.PUT_LINE(I);
END LOOP;
END;
/
NOTE:
A NUMBER(10);
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE(I);
A := A+1;
END LOOP;
END;
/
VIEW
-----
A view contains rows and columns, just like a real table. The fields in a view are
fields from one or more real tables in the database.
You can add SQL statements and functions to a view and present the data as if the
data were coming from one single table.
FROM table_name
[WHERE condition];
Note: A view always shows up-to-date data! The database engine recreates the
view, every time a user queries it.
The following SQL creates a view that shows all customers from Brazil
EX:
CREATE VIEW V1 AS
SELECT *
FROM EMP;
The following SQL creates a view that selects ALL the Details in the "Emp" table
who are earning more than 2000 rps.
Example
CREATE VIEW v2 AS
SELECT *
FROM Emp
FROM table_name
WHERE condition;
Example
FROM emp
INDEX:
Indexes are used to retrieve data from the database more quickly than otherwise.
The users cannot see the indexes, they are just used to speed up searches/queries.
1. CLUSTERED
2. NON-CLUSTERED
EX:
CREATE INDEX I1
ON EMP(SAL ASC);
Ex:
OR
For MySql
EX:
IMPLICIT INDEXES:
KEY POINTS:
● CREATE INDEX IN COLUMNS THAT WILL BE FREQUENTLY
SEARCHED AGAINST.
● AN INDEX IS A POINTER TO DATA IN A TABLE.
● AN INDEX HELPS TO SPEED UP SELECT QUERIES &
WHERE CLAUSES, BUT IT SLOWS DOWN DATA I/P,WITH
THE UPDATE & INSERT STATEMENTS.
● INDEXES CAN BE CREATED OR DROPPED WITH NO
EFFECT ON THE DATA.
● INDEXES ARE AUTOMATICALLY CREATED WHEN PRIMARY
KEY & UNIQUE CONSTRAINTS ARE DEFINED IN A TABLE.
IMPLICIT INDEX:
THERE ARE INDEXES THAT ARE AUTOMATICALLY CREATED BY
THE DB SERVER WHEN AN OBJECT IS CREATED.
CLUSTERED INDEX:
LIMIT Syntax
SELECT column_name(s)
FROM table_name
[WHERE condition]
LIMIT number;
The following SQL statement selects the first three records from the "EMP" table:
Example
SELECT *
FROM EMP
LIMIT 3;
Example
The following SQL statement selects the first three records from the "EMP" table,
where the JOB is "SALESMAN":
EX:
SELECT *
FROM EMP
LIMIT 3;