DBMS Prac Journal
DBMS Prac Journal
CERTIFICATE
Prof. In-Charge
Mr. Abuzar Ansari
(Database Management Systems)
Examination Date:
Examiner’s Signature & Date:
1
Sr. No. Aim Date Page no.
1 Creating and working 6 JULY 2021 4
with Insert / Update /
Delete Trigger using
Before / After clause
a. Creating
simple Sequences
with clauses like
START WITH,
INCREMENT BY,
MAXVALUE,
MINVALUE, CYCLE |
NOCYCLE, CACHE |
NOCACHE, ORDER |
NOORECER.
b. Creating and
using Sequences for
tables.
2
5 Write a PL/SQL block 26 JULY 2021 18
with CASE WHEN
Statement
6 Writing PL/SQL 6 AUGUST 2021 21
Blocks with basic
programming
constructs for
following Iterative
Structure:
a. While-loop
Statements
b. For-loop
Statements.
7 Writing PL/SQL 9 AUGUST 2021 24
Blocks with basic
programming
constructs by
including a GoTO to
jump out of a loop
and NULL as a
statement inside IF
8 Writing Procedures in 24 AUGUST 2021 26
PL/SQL Block
Create an empty
procedure, replace a
procedure and call
procedure
Create a stored
procedure and call it
Define procedure to
insert data
9 Writing Functions in 24 AUGUST 2021 31
PL/SQL Block.
Writing a recursive
Functions in PL/SQL
Block
10 Study of transactions 20 SEPTEMBER 2021 36
rollback, commit
3
Practical 01:
Aim:
Code:
DESC EMP7;
DESC PROJECT;
4
AFTER INSERT ON EMP7
FOR EACH ROW
WHEN (NEW.PNO IS NOT NULL)
BEGIN
UPDATE PROJECT SET THRS = THRS + NEW.HRS WHERE PNO = NEW.PNO;
END;
/
5
WHEN(OLD.PNO IS NOT NULL)
BEGIN
UPDATE PROJECT SET THRS = THRS -: OLD.HRS WHERE PNO = OLD.PNO;
END;
/
Output:
6
7
8
9
Practical 02:
Aim:
Code:
DECLARE
V_COUNTER NUMBER(5):=0;
V_SUPPID SUPPLIER.SUPPID%TYPE;
V_SUPPNAME SUPPLIER.SUPPNAME%TYPE:='TA';
BEGIN
LOOP
INSERT INTO SUPPLIER (SUPPNAME,SUPPID) VALUES
(V_SUPPNAME,SUPPID.NEXTVAL);
V_COUNTER:=V_COUNTER+1;
EXIT WHEN V_COUNTER=100;
10
END LOOP;
END;
/
Output:
11
12
Practical 03:
Aim:
Sequences:
Creating simple Sequences with clauses like START WITH, INCREMENT BY, MAXVALUE,
MINVALUE, CYCLE | NOCYCLE, CACHE | NOCACHE, ORDER | NOORECER.
Creating and using Sequences for tables.
Question: - Write PL/SQL block to insert 10 records in Employee table , empno should be
auto incremented , should begin with 10, the employee number should recycle after reaching
to empno 50. Empno should increment by 10. [use sequence for empno ]
Code:
DECLARE
V_COUNTER NUMBER(5):=0;
V_EMPNO EMP.EMPNO%TYPE;
V_EMPNAME EMP.ENAME%TYPE:='RAM';
BEGIN
LOOP
INSERT INTO EMP(ENAME,EMPNO) VALUES (V_EMPNAME,EMPNO.NEXTVAL);
V_COUNTER:=V_COUNTER+1;
13
EXIT WHEN V_COUNTER=10;
END LOOP;
END;
/
Output:
14
Practical 04:
Aim:
Code:
DECLARE
CURSOR EMP_CURSOR IS SELECT ENO, SALARY, JOIN_DATE FROM EMP5;
V_ENO EMP5.ENO%TYPE;
V_SALARY EMP5.SALARY%TYPE;
V_JOIN_DATE EMP5.JOIN_DATE%TYPE;
BEGIN
OPEN EMP_CURSOR;
15
LOOP
FETCH EMP_CURSOR INTO V_ENO, V_SALARY, V_JOIN_DATE;
IF EMP_CURSOR%NOTFOUND THEN
EXIT;
ELSIF V_JOIN_DATE = TO_DATE('20001212','YYYYMMDD') THEN
UPDATE EMP5 SET SALARY = V_SALARY*1.15 WHERE ENO = V_ENO;
ELSE
UPDATE EMP5 SET SALARY = V_SALARY*1.05 WHERE ENO = V_ENO;
END IF;
END LOOP;
CLOSE EMP_CURSOR;
END;
/
Output:
16
17
Practical 05
Aim:
Create a table lecturer with one of the attribute as major subject. Write a PL/SQL block with
CASE WHEN statement with variable which print the course name depending upon the major
subject for the specified lecturer id.
Table : Lecturer { lid NUMBER(4), lname varchar2(14), majorsubject varchar2(10),
coursename varchar2(15)}
Code:
DECLARE
V_LID LECTURER.LID%TYPE := &V_LID;
V_LNAME LECTURER.LNAME%TYPE;
V_MAJORSUBJECT LECTURER.MAJORSUBJECT%TYPE;
V_COURSENAME LECTURER.COURSENAME%TYPE;
BEGIN
SELECT LNAME, MAJORSUBJECT,COURSENAME INTO V_LNAME, V_MAJORSUBJECT,
V_COURSENAME FROM LECTURER WHERE LID = V_LID;
CASE V_MAJORSUBJECT
WHEN 'CS' THEN DBMS_OUTPUT.PUT_LINE(V_LNAME || ' : ' ||
V_COURSENAME);
18
WHEN 'IT' THEN DBMS_OUTPUT.PUT_LINE(V_LNAME || ' : ' ||
V_COURSENAME);
WHEN 'BT' THEN DBMS_OUTPUT.PUT_LINE(V_LNAME || ' : ' ||
V_COURSENAME);
END CASE;
END;
/
Output:
19
20
Practical 06
Aim:
Writing PL/SQL Blocks with basic programming constructs for following Iterative Structure:
While-loop Statements
For-loop Statements.
Question: - Write a PL/SQL block to print department wise total number of employees along
the total salary paid to that department. [ USE : 1)While loop 2)For loop ]
Table(s) :
Employee {empno number(4) primary key, ename varchar2(10), salary number(10), deptno
number(4) reference key}
Department {deptno number(4) primary key , dname varchar2(4)}
Code:
DECLARE
CURSOR DEPARTMENT_CURSOR IS SELECT DEPTNO, DNAME FROM DEPT;
V_DEPTNO DEPT.DEPTNO%TYPE;
V_DNAME DEPT.DNAME%TYPE;
V_SALARY_SUM NUMBER(10);
V_EMPLOYEE_COUNT NUMBER(3);
BEGIN
OPEN DEPARTMENT_CURSOR;
FETCH DEPARTMENT_CURSOR INTO V_DEPTNO, V_DNAME;
WHILE DEPARTMENT_CURSOR%FOUND LOOP
SELECT COUNT(EMPNO), SUM(SAL) INTO V_EMPLOYEE_COUNT,
V_SALARY_SUM FROM EMP WHERE DEPTNO = V_DEPTNO;
21
DBMS_OUTPUT.PUT_LINE(V_DEPTNO || ' ' || V_DNAME || ' ' || ' TOTAL SALARY: ' ||
V_SALARY_SUM || ' EMPLOYEE COUNT: ' || V_EMPLOYEE_COUNT );
FETCH DEPARTMENT_CURSOR INTO V_DEPTNO, V_DNAME;
END LOOP;
CLOSE DEPARTMENT_CURSOR;
END;
/
Output:
Code:
DECLARE
CURSOR DEPARTMENT_CURSOR IS SELECT * FROM DEPT;
V_SALARY_SUM NUMBER(10);
V_EMPLOYEE_COUNT NUMBER(3);
V_DEPARTMENT_ROW DEPT%ROWTYPE;
BEGIN
22
FOR V_DEPARTMENT_ROW IN DEPARTMENT_CURSOR LOOP
SELECT COUNT(EMPNO), SUM(SAL) INTO V_EMPLOYEE_COUNT,
V_SALARY_SUM FROM EMP WHERE DEPTNO = V_DEPARTMENT_ROW.DEPTNO;
DBMS_OUTPUT.PUT_LINE(V_DEPARTMENT_ROW.DEPTNO || ' '||
V_DEPARTMENT_ROW.DNAME || ' ' || ' TOTAL SALARY: ' || V_SALARY_SUM || ' EMPLOYEE
COUNT: ' || V_EMPLOYEE_COUNT);
END LOOP;
CLOSE DEPARTMENT_CURSOR;
END;
/
Output:
23
Practical 07
Aim:
Writing PL/SQL Blocks with basic programming constructs by including a GoTO to jump out of
a loop and NULL as a statement inside IF
Question: -Write a PL/SQL block to print employees name and number excluding empno 10
and 15 along their department name. [USE : Goto statement]
Table employee {empno number(5) primary key , ename varchar2(15), deptno number(4)
reference key}
Department {deptno number(4) primary key , dname varchar2(4)}
Code:
DECLARE
CURSOR EMPLOYEE_CURSOR IS SELECT * FROM EMP;
V_EMPLOYEE_ROW EMP%ROWTYPE;
V_DNAME DEPT.DNAME%TYPE;
BEGIN
FOR V_EMPLOYEE_ROW IN EMPLOYEE_CURSOR LOOP
IF V_EMPLOYEE_ROW.EMPNO = 7369 OR V_EMPLOYEE_ROW.EMPNO = 7499
THEN
GOTO SKIP;
END IF;
SELECT DNAME INTO V_DNAME FROM DEPT WHERE DEPTNO =
V_EMPLOYEE_ROW.DEPTNO;
DBMS_OUTPUT.PUT_LINE(V_EMPLOYEE_ROW.EMPNO || ' ' ||
V_EMPLOYEE_ROW.ENAME || ' ' || V_DNAME);
<<SKIP>>
NULL;
END LOOP;
24
END;
/
Output;
25
Practical 08
Aim:
Question: - The HRD manager has decided to rise the salary of employee by 0.15. write PL/SQL block to
accept the employee number and update the salary of that employee through procedure. Display appropriate
message based on the existence of the record in employee table.
Table: employee {empno number(5) primary key , ename varchar2(15)}
Question: Write PL/SQL procedure to accept the employee number and display employees
name along salary and his department name.
Table employee {empno number(5) primary key , ename varchar2(15), deptno number(4)
reference key}
Department {deptno number (4) primary key , dname varchar2(4)}
Code:
DECLARE
V_EMPNO EMP.EMPNO%TYPE := &V_EMPNO;
BEGIN
INCREASE_SALARY(V_EMPNO);
END;
/
Output:
27
Code:
28
DECLARE
V_EMPNO EMP.EMPNO%TYPE := &V_EMPNO;
BEGIN
DISPLAY_EMPLOYEE(V_EMPNO);
END;
/
Output:
29
30
Practical 09
Aim:
Code:
31
END;
/
DECLARE
V_DEPTNO DEPT.DEPTNO%TYPE := &V_DEPTNO;
BEGIN
DBMS_OUTPUT.PUT_LINE(PRACTICAL9A_FUNCTION(V_DEPTNO));
END;
/
Output:
32
Code:
33
V_SALARY EMP4.SALARY%TYPE;
BEGIN
IF COUNTER = 11 THEN
RETURN 'COMPLETED';
END IF;
SELECT ENAME, SALARY INTO V_ENAME, V_SALARY FROM EMP4 WHERE EMPNO =
COUNTER;
DBMS_OUTPUT.PUT_LINE(V_ENAME || ' ' || V_SALARY);
RETURN PRACTICAL9B_FUNCTION(COUNTER + 1);
END;
/
BEGIN
DBMS_OUTPUT.PUT_LINE(PRACTICAL9B_FUNCTION(1));
END;
/
Output:
34
35
Practical 10
Aim:
Code:
CREATE TABLE EMP4 (EMPNO NUMBER(5) PRIMARY KEY , ENAME VARCHAR2(15), SALARY
NUMBER(10))
INSERT INTO EMP4 VALUES(001,’BLAKE’,900);
INSERT INTO EMP4 VALUES(002,’CLARK’,1000);
INSERT INTO EMP4 VALUES(003,’ADAM’,200);
INSERT INTO EMP4 VALUES(004,’STEVE’,250);
INSERT INTO EMP4 VALUES(005,’PETER’,350);
INSERT INTO EMP4 VALUES(006,’OTIS’,300);
INSERT INTO EMP4 VALUES(007,’AVA’,500);
INSERT INTO EMP4 VALUES(008,’SAM’,550);
INSERT INTO EMP4 VALUES(009,’JOHN’,600);
INSERT INTO EMP4 VALUES(010,’KEVIN’,650);
DECLARE
TOTAL_SAL NUMBER(9);
BEGIN
INSERT INTO EMP4 VALUES(011,'DAVID',1000);
SAVEPOINT NO_UPDATE;
36
UPDATE EMP4 SET SALARY = SALARY+2000 WHERE ENAME = 'BLAKE';
UPDATE EMP4 SET SALARY = SALARY + 1500 WHERE ENAME = 'CLARK';
SELECT SUM(SALARY) INTO TOTAL_SAL FROM EMP4;
IF TOTAL_SAL>2000 THEN
ROLLBACK TO SAVEPOINT NO_UPDATE;
END IF;
COMMIT;
END;
/
Output:
37
38
39