0% found this document useful (0 votes)
29 views

DMS Pract Exam

Uploaded by

chavanritesh2207
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
29 views

DMS Pract Exam

Uploaded by

chavanritesh2207
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 41

Q1: Create EMP Table and Queries

Create Table and Insert Data


CREATE TABLE EMP (
empno INT PRIMARY KEY,
ename VARCHAR(50),
job VARCHAR(50),
salary DECIMAL(10, 2),
joiningdate DATE,
DOB DATE,
deptno INT
);

-- Insert suitable data


INSERT INTO EMP VALUES (1, 'John', 'Manager', 50000, '2018-01-15', '1985-03-25', 1001);
INSERT INTO EMP VALUES (2, 'Sarah', 'Developer', 40000, '2020-06-10', '1990-07-19', 1002);
INSERT INTO EMP VALUES (3, 'Sam', 'Salesman', 35000, '2019-05-20', '1988-04-10', 1003);
INSERT INTO EMP VALUES (4, 'Sophia', 'Analyst', 45000, '2017-03-05', '1992-01-15', 1002);
INSERT INTO EMP VALUES (5, 'Steve', 'Developer', 42000, '2015-11-25', '1987-08-20', 1002);
INSERT INTO EMP VALUES (6, 'Sandra', 'Developer', 48000, '2019-12-01', '1989-11-30', 1002);

i) Display employees name and number in an increasing order of salary


SELECT ename, empno
FROM EMP
ORDER BY salary ASC;

ii) Display the list of employees excluding job title as ‘Salesman’


SELECT *
FROM EMP
WHERE job <> 'Salesman';
iii) Display total salary of all employees
SELECT SUM(salary) AS Total_Salary
FROM EMP;

iv) Display number of employees department-wise


SELECT deptno, COUNT(*) AS Employee_Count
FROM EMP
GROUP BY deptno;

v) Display employee name having experience more than 3 years


SELECT ename
FROM EMP
WHERE (SYSDATE - joiningdate) / 365 > 3;

vi) Display employee name starting with “S” and working in deptno 1002
SELECT ename
FROM EMP
WHERE ename LIKE 'S%' AND deptno = 1002;

Q2: SQL Commands for Sequence Operations


i) Create Sequence Seq_1
CREATE SEQUENCE Seq_1
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 20;

ii) Insert record into EMP table using Seq_1


INSERT INTO EMP (empno, ename, job, salary, joiningdate, DOB, deptno)
VALUES (Seq_1.NEXTVAL, 'Emma', 'Tester', 38000, '2023-02-14', '1995-12-05', 1003);

iii) Change the Seq_1 max value from 20 to 50


ALTER SEQUENCE Seq_1
MAXVALUE 50;

iv) Drop sequence Seq_1 from the database


DROP SEQUENCE Seq_1;

Q3: PL/SQL Program to Print n Even Numbers Using For Loop


DECLARE
n NUMBER := 10; -- Specify the number of even numbers to print
BEGIN
FOR i IN 1..n LOOP
DBMS_OUTPUT.PUT_LINE(i * 2); -- Prints even numbers
END LOOP;
END;
/

Q1: EMP Table with Integrity Constraints and Queries


Create Table and Insert Data
CREATE TABLE EMP (
empno INT PRIMARY KEY,
ename VARCHAR(50) NOT NULL,
job VARCHAR(50) NOT NULL,
salary DECIMAL(10, 2) CHECK (salary > 0),
joiningdate DATE NOT NULL,
DOB DATE CHECK (DOB < SYSDATE),
deptno INT NOT NULL
);

-- Insert suitable data


INSERT INTO EMP VALUES (1, 'John', 'Manager', 60000, '2010-05-10', '1985-03-25', 10);
INSERT INTO EMP VALUES (2, 'Alice', 'Developer', 45000, '2008-03-12', '1990-07-15', 30);
INSERT INTO EMP VALUES (3, 'Raj', 'Analyst', 40000, '2012-11-25', '1987-01-20', 20);
INSERT INTO EMP VALUES (4, 'Sophia', 'Manager', 70000, '2004-07-19', '1984-05-12', 10);
INSERT INTO EMP VALUES (5, 'Sam', 'Clerk', 30000, '2015-01-10', '1992-06-14', 30);

i) Find the employees who belong to deptno 10 or 30


SELECT *
FROM EMP
WHERE deptno IN (10, 30);

ii) Find out the number of employees who work as a manager


SELECT COUNT(*) AS Manager_Count
FROM EMP
WHERE job = 'Manager';

iii) Display names of employees whose name starts with the alphabet ‘A’
SELECT ename
FROM EMP
WHERE ename LIKE 'A%';

iv) Increase the salary of employees by 20% who joined after ‘1/1/2005’
UPDATE EMP
SET salary = salary * 1.2
WHERE joiningdate > TO_DATE('01-JAN-2005', 'DD-MON-YYYY');

-- Check updated salaries


SELECT * FROM EMP;

v) Display details of employees whose job is the same as the job of ‘Raj’
SELECT *
FROM EMP
WHERE job = (SELECT job FROM EMP WHERE ename = 'Raj');

Q2: EMP and Dept Tables with Integrity Constraints


Create Tables and Insert Data
CREATE TABLE Dept (
deptno INT PRIMARY KEY,
dname VARCHAR(50) NOT NULL,
location VARCHAR(50)
);

CREATE TABLE EMP (


empno INT PRIMARY KEY,
ename VARCHAR(50) NOT NULL,
job VARCHAR(50) NOT NULL,
salary DECIMAL(10, 2) CHECK (salary > 0),
joiningdate DATE NOT NULL,
DOB DATE CHECK (DOB < SYSDATE),
deptno INT NOT NULL,
FOREIGN KEY (deptno) REFERENCES Dept(deptno)
);

-- Insert suitable data into Dept


INSERT INTO Dept VALUES (10, 'Sales', 'Mumbai');
INSERT INTO Dept VALUES (20, 'HR', 'Pune');
INSERT INTO Dept VALUES (30, 'IT', 'Bangalore');

-- Insert suitable data into EMP


INSERT INTO EMP VALUES (1, 'John', 'Manager', 60000, '2010-05-10', '1985-03-25', 10);
INSERT INTO EMP VALUES (2, 'Alice', 'Developer', 45000, '2008-03-12', '1990-07-15', 30);
INSERT INTO EMP VALUES (3, 'Raj', 'Analyst', 40000, '2012-11-25', '1987-01-20', 20);
INSERT INTO EMP VALUES (4, 'Sophia', 'Manager', 70000, '2004-07-19', '1984-05-12', 10);
INSERT INTO EMP VALUES (5, 'Sam', 'Clerk', 30000, '2015-01-10', '1992-06-14', 30);

i) Create view emp_vu20 that contains details of employees in deptno 20


CREATE VIEW emp_vu20 AS
SELECT *
FROM EMP
WHERE deptno = 20;

ii) Display employee details from view emp_vu20 whose salary is greater than 50,000
SELECT *
FROM emp_vu20
WHERE salary > 50000;
iii) Delete view named as emp_vu20
DROP VIEW emp_vu20;

iv) Create view emp_dept that contains employee name, job, salary, and their department
name for employees whose job is Manager
CREATE VIEW emp_dept AS
SELECT e.ename, e.job, e.salary, d.dname
FROM EMP e
JOIN Dept d ON e.deptno = d.deptno
WHERE e.job = 'Manager';

Q3: PL/SQL Procedure to Find the Largest Number Among Three


CREATE OR REPLACE PROCEDURE find_largest (a IN NUMBER, b IN NUMBER, c IN NUMBER)
IS
largest NUMBER;
BEGIN
IF a > b AND a > c THEN
largest := a;
ELSIF b > c THEN
largest := b;
ELSE
largest := c;
END IF;

DBMS_OUTPUT.PUT_LINE('The largest number is: ' || largest);


END;
/
Execute the procedure:
BEGIN
find_largest(25, 40, 15);
END;
/

Q1: Book_Master Table and Queries


Create Table and Insert Data
CREATE TABLE Book_Master (
book_id INT PRIMARY KEY,
book_name VARCHAR(100) NOT NULL,
author VARCHAR(100) NOT NULL,
no_of_copies INT CHECK (no_of_copies >= 0),
price DECIMAL(10, 2) CHECK (price > 0)
);

-- Insert 5 rows into Book_Master


INSERT INTO Book_Master VALUES (1, 'Data Structures', 'Mark Allen', 15, 600);
INSERT INTO Book_Master VALUES (2, 'Digital Logic', 'Peter Brown', 8, 750);
INSERT INTO Book_Master VALUES (3, 'Database Systems', 'John Davis', 5, 820);
INSERT INTO Book_Master VALUES (4, 'Design Patterns', 'Gamma et al.', 12, 650);
INSERT INTO Book_Master VALUES (5, 'Deep Learning', 'Ian Goodfellow', 3, 1200);

i) Get author-wise list of all books


SELECT author, book_name
FROM Book_Master
ORDER BY author;

ii) Display all books whose price is between 500 & 800
SELECT *
FROM Book_Master
WHERE price BETWEEN 500 AND 800;

iii) Display all books with details whose name starts with ‘D’
SELECT *
FROM Book_Master
WHERE book_name LIKE 'D%';

iv) Display all books whose price is above 700


SELECT *
FROM Book_Master
WHERE price > 700;

v) Display all books whose number of copies is less than 10


SELECT *
FROM Book_Master
WHERE no_of_copies < 10;

Q2: View Operations on Book_Master


i) Create a view v1 to fetch book_id, book_name, and price of the book
CREATE VIEW v1 AS
SELECT book_id, book_name, price
FROM Book_Master;

ii) Display book names from v1 having price greater than 200
SELECT book_name
FROM v1
WHERE price > 200;

iii) Delete view named as v1


DROP VIEW v1;

Q3: PL/SQL Program to Handle Divide by Zero Exception


DECLARE
num1 NUMBER := 10;
num2 NUMBER := 0;
result NUMBER;
BEGIN
-- Attempting division
BEGIN
result := num1 / num2;
DBMS_OUTPUT.PUT_LINE('Result: ' || result);
EXCEPTION
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE('Error: Division by zero is not allowed.');
END;
END;
/

Q1: EMP Table and Queries


Create Table and Insert Data
CREATE TABLE EMP (
empno INT PRIMARY KEY,
ename VARCHAR(50) NOT NULL,
job VARCHAR(50) NOT NULL,
salary DECIMAL(10, 2) CHECK (salary > 0),
joiningdate DATE NOT NULL,
DOB DATE CHECK (DOB < SYSDATE),
deptno INT NOT NULL
);

-- Insert suitable data


INSERT INTO EMP VALUES (1, 'John', 'Manager', 6000, '2010-05-10', '1985-03-25', 10);
INSERT INTO EMP VALUES (2, 'Ash', 'Developer', 8000, '2015-07-20', '1992-06-15', 20);
INSERT INTO EMP VALUES (3, 'Rajesh', 'Clerk', 3000, '2020-01-15', '1995-12-10', 10);
INSERT INTO EMP VALUES (4, 'Anush', 'Manager', 12000, '2012-03-12', '1988-02-25', 10);
INSERT INTO EMP VALUES (5, 'Ramesh', 'Analyst', 10000, '2018-11-05', '1990-10-22', 20);

i) To display the annual salary of all employees


SELECT ename, salary * 12 AS Annual_Salary
FROM EMP;

ii) To display details for all employees whose salary is not in the range of Rs. 5000 and Rs.
10000
SELECT *
FROM EMP
WHERE salary NOT BETWEEN 5000 AND 10000;

iii) Change salary to 50000 for employees whose job is 'Manager' and dept_no is 10
UPDATE EMP
SET salary = 50000
WHERE job = 'Manager' AND deptno = 10;

-- Check updated salaries


SELECT * FROM EMP;

iv) Display employee details whose name ends with ‘sh’ and name contains a maximum of
6 characters
SELECT *
FROM EMP
WHERE ename LIKE '%sh' AND LENGTH(ename) <= 6;

v) Display details of employees whose salary is greater than the minimum salary of each
department
SELECT *
FROM EMP e
WHERE salary > (SELECT MIN(salary)
FROM EMP
WHERE deptno = e.deptno);

Q2: SQL Commands


i) Create user ‘Jack’ having password as ‘Jack123’
CREATE USER Jack IDENTIFIED BY Jack123;

ii) Assign CREATE, SELECT, and UPDATE privileges to user ‘Jack’ on the EMP table
GRANT CREATE, SELECT, UPDATE ON EMP TO Jack;

iii) Remove UPDATE privileges from ‘Jack’


REVOKE UPDATE ON EMP FROM Jack;

Q3: PL/SQL Program to Handle Odd Number Exception


DECLARE
num NUMBER;
invalid_number EXCEPTION;
BEGIN
-- Accept number from user
DBMS_OUTPUT.PUT_LINE('Enter a number:');
num := &num;

-- Check if the number is odd


IF MOD(num, 2) = 1 THEN
RAISE invalid_number;
ELSE
DBMS_OUTPUT.PUT_LINE('You entered an even number: ' || num);
END IF;

EXCEPTION
WHEN invalid_number THEN
DBMS_OUTPUT.PUT_LINE('Error: Invalid number, you entered an odd number.');
END;
/

Q1: EMP Table and Queries


Create Table and Insert Data
CREATE TABLE EMP (
empno INT PRIMARY KEY,
ename VARCHAR(50) NOT NULL,
job VARCHAR(50) NOT NULL,
salary DECIMAL(10, 2) CHECK (salary > 0),
joiningdate DATE NOT NULL,
DOB DATE CHECK (DOB < SYSDATE),
deptno INT NOT NULL,
city VARCHAR(50)
);

-- Insert suitable data


INSERT INTO EMP VALUES (1, 'John', 'Manager', 60000, '2010-05-10', '1985-03-25', 10,
'Mumbai');
INSERT INTO EMP VALUES (2, 'Alice', 'Developer', 45000, '2019-03-15', '1990-07-10', 20,
'Pune');
INSERT INTO EMP VALUES (3, 'Rajesh', 'Analyst', 32000, '2018-11-20', '1988-12-15', 20,
'Mumbai');
INSERT INTO EMP VALUES (4, 'Sophia', 'Clerk', 30000, '2021-06-10', '1995-05-25', 30, 'Delhi');
INSERT INTO EMP VALUES (5, 'Ramesh', 'Manager', 50000, '2017-05-12', '1984-09-19', 20,
'Pune');

i) Display the names of employees in capital letters


SELECT UPPER(ename) AS Employee_Name
FROM EMP;

ii) Display the details of employees who live in the cities Pune and Mumbai
SELECT *
FROM EMP
WHERE city IN ('Pune', 'Mumbai');
iii) Display the details of employees whose joining date is after ’01-Apr-2017’
SELECT *
FROM EMP
WHERE joiningdate > TO_DATE('01-APR-2017', 'DD-MON-YYYY');

iv) Display the total number of employees whose deptno is ‘20’


SELECT COUNT(*) AS Total_Employees
FROM EMP
WHERE deptno = 20;

v) Display department numbers having maximum salary greater than 30,000


SELECT deptno
FROM EMP
GROUP BY deptno
HAVING MAX(salary) > 30000;

Q2: EMP and Department Tables with Queries


Create Tables
CREATE TABLE Department (
deptno INT PRIMARY KEY,
dname VARCHAR(50) NOT NULL,
location VARCHAR(50) NOT NULL
);

CREATE TABLE EMP (


empno INT PRIMARY KEY,
ename VARCHAR(50) NOT NULL,
job VARCHAR(50) NOT NULL,
salary DECIMAL(10, 2) CHECK (salary > 0),
joiningdate DATE NOT NULL,
DOB DATE CHECK (DOB < SYSDATE),
deptno INT NOT NULL,
FOREIGN KEY (deptno) REFERENCES Department(deptno)
);

-- Insert data into Department


INSERT INTO Department VALUES (10, 'HR', 'Mumbai');
INSERT INTO Department VALUES (20, 'IT', 'Pune');
INSERT INTO Department VALUES (30, 'Sales', 'Delhi');

-- Insert data into EMP


INSERT INTO EMP VALUES (1, 'John', 'Manager', 60000, '2010-05-10', '1985-03-25', 10);
INSERT INTO EMP VALUES (2, 'Alice', 'Developer', 45000, '2019-03-15', '1990-07-10', 20);
INSERT INTO EMP VALUES (3, 'Rajesh', 'Analyst', 32000, '2018-11-20', '1988-12-15', 20);
INSERT INTO EMP VALUES (4, 'Sophia', 'Clerk', 30000, '2021-06-10', '1995-05-25', 30);
INSERT INTO EMP VALUES (5, 'Ramesh', 'Manager', 50000, '2017-05-12', '1984-09-19', 20);

i) Create view emp_vu20 that contains details of employees in deptno 20


CREATE VIEW emp_vu20 AS
SELECT *
FROM EMP
WHERE deptno = 20;

ii) Display employee details from emp_vu20 whose salary is greater than 50,000
SELECT *
FROM emp_vu20
WHERE salary > 50000;
iii) Delete view named as emp_vu20
DROP VIEW emp_vu20;

iv) Create view emp_dept containing employee name, job, salary, and department name
for employees whose job is 'Manager'
CREATE VIEW emp_dept AS
SELECT e.ename, e.job, e.salary, d.dname
FROM EMP e
JOIN Department d ON e.deptno = d.deptno
WHERE e.job = 'Manager';

Q3: PL/SQL Function to Calculate Factorial


CREATE OR REPLACE FUNCTION calculate_factorial(num IN NUMBER) RETURN NUMBER IS
fact NUMBER := 1;
BEGIN
IF num < 0 THEN
RETURN NULL; -- Factorial not defined for negative numbers
END IF;

FOR i IN 1..num LOOP


fact := fact * i;
END LOOP;

RETURN fact;
END;
/

-- Execute Function
DECLARE
input_num NUMBER := 5; -- Replace with desired input
result NUMBER;
BEGIN
result := calculate_factorial(input_num);
DBMS_OUTPUT.PUT_LINE('The factorial of ' || input_num || ' is: ' || result);
END;
/

Q1: EMP Table with Savepoints


Create Table and Insert Data
CREATE TABLE EMP (
empno INT PRIMARY KEY,
ename VARCHAR(50) NOT NULL,
job VARCHAR(50) NOT NULL,
salary DECIMAL(10, 2) CHECK (salary > 0),
joiningdate DATE NOT NULL,
DOB DATE CHECK (DOB < SYSDATE),
deptno INT NOT NULL
);

-- Initial Insert
INSERT INTO EMP VALUES (1, 'John', 'Manager', 60000, '2010-05-10', '1985-03-25', 10);
COMMIT; -- Save the data

i) Insert one row into the table


INSERT INTO EMP VALUES (2, 'Alice', 'Developer', 45000, '2019-03-15', '1990-07-10', 20);

ii) Save the data


COMMIT;

iii) Insert second row into the table


INSERT INTO EMP VALUES (3, 'Rajesh', 'Analyst', 32000, '2018-11-20', '1988-12-15', 20);

iv) Undo the insertion of the second row


ROLLBACK;

v) Insert two rows into the table


INSERT INTO EMP VALUES (4, 'Sophia', 'Clerk', 30000, '2021-06-10', '1995-05-25', 30);
INSERT INTO EMP VALUES (5, 'Ramesh', 'Manager', 50000, '2017-05-12', '1984-09-19', 20);
vi) Create Savepoint s1
SAVEPOINT s1;

vii) Insert one row into the table


INSERT INTO EMP VALUES (6, 'Nina', 'Tester', 40000, '2023-01-15', '1997-08-10', 30);

viii) Undo up to savepoint s1


ROLLBACK TO SAVEPOINT s1;

Q2: Sequence Operations


i) Create a sequence DB_SEQ
CREATE SEQUENCE DB_SEQ
START WITH 1
MAXVALUE 10
INCREMENT BY 2;

ii) Insert records into EMP table using sequence DB_SEQ


INSERT INTO EMP (empno, ename, job, salary, joiningdate, DOB, deptno)
VALUES (DB_SEQ.NEXTVAL, 'Mark', 'Designer', 35000, '2020-04-05', '1992-11-22', 10);

INSERT INTO EMP (empno, ename, job, salary, joiningdate, DOB, deptno)
VALUES (DB_SEQ.NEXTVAL, 'Leo', 'Developer', 48000, '2019-02-12', '1990-06-15', 20);

iii) Modify the sequence DB_SEQ


ALTER SEQUENCE DB_SEQ
INCREMENT BY 3
MAXVALUE 20;

iv) Remove the sequence DB_SEQ


DROP SEQUENCE DB_SEQ;
Q3: Trigger to Display Salary Difference
Create Trigger trg1
CREATE OR REPLACE TRIGGER trg1
AFTER UPDATE OF salary ON EMP
FOR EACH ROW
DECLARE
salary_difference NUMBER;
BEGIN
salary_difference := :NEW.salary - :OLD.salary;
DBMS_OUTPUT.PUT_LINE('Salary Difference: ' || salary_difference);
END;
/

Testing the Trigger


UPDATE EMP
SET salary = 70000
WHERE empno = 1;
 When the above query is executed, the trigger will print the salary difference.

Q1: Student Table and Queries


Create Table and Insert Data
CREATE TABLE Student (
Roll_no INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
marks INT CHECK (marks >= 0 AND marks <= 100),
dept VARCHAR(50) NOT NULL,
age INT CHECK (age > 0),
place VARCHAR(50),
phone VARCHAR(15),
birthdate DATE
);

-- Insert suitable data


INSERT INTO Student VALUES (1, 'Rachana', 85, 'Computer', 20, 'Pune', '9876543210', '2003-
05-14');
INSERT INTO Student VALUES (2, 'Rahul', 81, 'IT', 21, 'Jalgaon', '9876543211', '2002-08-23');
INSERT INTO Student VALUES (3, 'Sneha', 72, 'Computer', 19, 'Mumbai', '9876543212', '2004-
12-10');
INSERT INTO Student VALUES (4, 'Amit', 35, 'Mechanical', 22, 'Nashik', '9876543213', '2001-
03-18');
INSERT INTO Student VALUES (5, 'Kiran', 90, 'Computer', 20, 'Pune', '9876543214', '2003-09-
25');

i) List students having place as ‘Pune’ or ‘Jalgaon’


SELECT *
FROM Student
WHERE place IN ('Pune', 'Jalgaon');

ii) List students having the same department as that of ‘Rachana’


SELECT *
FROM Student
WHERE dept = (SELECT dept FROM Student WHERE name = 'Rachana');

iii) Change marks of ‘Rahul’ from 81 to 96


UPDATE Student
SET marks = 96
WHERE name = 'Rahul';

iv) List student names and marks from the ‘Computer’ department
SELECT name, marks
FROM Student
WHERE dept = 'Computer';

v) List student names who have marks less than 40


SELECT name
FROM Student
WHERE marks < 40;

vi) List students who are not from ‘Mumbai’


SELECT *
FROM Student
WHERE place <> 'Mumbai';

Q2: View Operations


i) Create a view to fetch Roll_no, name, and marks, and name it as S_View
CREATE VIEW S_View AS
SELECT Roll_no, name, marks
FROM Student;

ii) Display records from S_View where marks are greater than 60
SELECT *
FROM S_View
WHERE marks > 60;
iii) Delete view named as S_View
DROP VIEW S_View;

Q3: Procedure to Update Salary of Employees by 25%


Procedure Definition
CREATE OR REPLACE PROCEDURE update_salary AS
BEGIN
UPDATE EMP
SET salary = salary * 1.25;

DBMS_OUTPUT.PUT_LINE('Salaries updated by 25% for all employees.');


END;
/

Executing the Procedure


EXEC update_salary;

Q1: EMP Table and Queries


Create Table and Insert Data
CREATE TABLE EMP (
empno INT PRIMARY KEY,
ename VARCHAR(50) NOT NULL,
job VARCHAR(50) NOT NULL,
salary DECIMAL(10, 2) CHECK (salary > 0),
joiningdate DATE NOT NULL,
DOB DATE CHECK (DOB < SYSDATE),
deptno INT NOT NULL
);

-- Insert suitable data


INSERT INTO EMP VALUES (1, 'John', 'Manager', 75000, '2010-05-10', '1985-03-25', 10);
INSERT INTO EMP VALUES (2, 'Alice', 'Developer', 60000, '2013-07-15', '1990-08-05', 20);
INSERT INTO EMP VALUES (3, 'Rahul', 'Analyst', 55000, '2018-11-20', '1992-12-10', 30);
INSERT INTO EMP VALUES (4, 'Sophia', 'Clerk', 40000, '2021-06-10', '1997-05-25', 10);
INSERT INTO EMP VALUES (5, 'Ramesh', 'Manager', 90000, '2008-04-12', '1980-09-19', 20);
INSERT INTO EMP VALUES (6, 'Nina', 'Tester', 45000, '2019-03-15', '1995-08-10', 30);

i) Display names of employees whose experience is more than 10 years


SELECT ename
FROM EMP
WHERE SYSDATE - joiningdate > 3650;

ii) Display age of employees


SELECT ename, FLOOR(MONTHS_BETWEEN(SYSDATE, DOB) / 12) AS age
FROM EMP;

iii) Display average salary of all employees


SELECT AVG(salary) AS avg_salary
FROM EMP;

iv) Display name of the employee who earned the highest salary
SELECT ename
FROM EMP
WHERE salary = (SELECT MAX(salary) FROM EMP);

v) Display details of those employees who work in Mumbai or Chennai


Assume there is a location column in the EMP table.
ALTER TABLE EMP ADD location VARCHAR(50);

UPDATE EMP
SET location = CASE
WHEN empno IN (1, 4) THEN 'Mumbai'
WHEN empno IN (2, 5) THEN 'Chennai'
ELSE 'Pune'
END;

SELECT *
FROM EMP
WHERE location IN ('Mumbai', 'Chennai');

Q2: SQL Statements for Synonym and Index


i) Create a synonym for the EMP table
CREATE SYNONYM Emp FOR EMP;

ii) Create an index on the EMP table using empno


CREATE INDEX empno_idx ON EMP (empno);

Q3: PL/SQL Program Using Cursor


Cursor to Display Details of Employees Whose Job is Manager
DECLARE
CURSOR manager_cursor IS
SELECT empno, ename, salary, deptno
FROM EMP
WHERE job = 'Manager';

emp_record manager_cursor%ROWTYPE;
BEGIN
OPEN manager_cursor;

LOOP
FETCH manager_cursor INTO emp_record;
EXIT WHEN manager_cursor%NOTFOUND;

DBMS_OUTPUT.PUT_LINE('Emp No: ' || emp_record.empno);


DBMS_OUTPUT.PUT_LINE('Name: ' || emp_record.ename);
DBMS_OUTPUT.PUT_LINE('Salary: ' || emp_record.salary);
DBMS_OUTPUT.PUT_LINE('Dept No: ' || emp_record.deptno);
DBMS_OUTPUT.PUT_LINE('-------------------------');
END LOOP;

CLOSE manager_cursor;
END;
/

Q1: EMP Table and Queries


Create Table and Insert Data
CREATE TABLE EMP (
empno INT PRIMARY KEY,
ename VARCHAR(50) NOT NULL,
job VARCHAR(50) NOT NULL,
salary DECIMAL(10, 2) CHECK (salary > 0),
joiningdate DATE NOT NULL,
DOB DATE CHECK (DOB < SYSDATE),
deptno INT NOT NULL
);

-- Insert suitable data


INSERT INTO EMP VALUES (1, 'John', 'Manager', 75000, '2010-05-10', '1985-03-25', 1);
INSERT INTO EMP VALUES (2, 'Alice', 'Quality Analyst', 60000, '2013-07-15', '1990-08-05', 2);
INSERT INTO EMP VALUES (3, 'Rahul', 'Developer', 55000, '2018-11-20', '1992-12-10', 3);
INSERT INTO EMP VALUES (4, 'Sophia', 'Tester', 40000, '2021-06-10', '1997-05-25', 4);
INSERT INTO EMP VALUES (5, 'Ramesh', 'Manager', 90000, '2008-04-12', '1980-09-19', 2);

i) Find the summation of salary for all employees


SELECT SUM(salary) AS total_salary
FROM EMP;

ii) Display Minimum and Maximum Salary


SELECT MIN(salary) AS min_salary, MAX(salary) AS max_salary
FROM EMP;

iii) Display all records in descending order of employee name


SELECT *
FROM EMP
ORDER BY ename DESC;

iv) Display employee names working in the department “Quality”


SELECT ename
FROM EMP
WHERE job LIKE '%Quality%';

v) Display the name of the employee who earned the highest salary
SELECT ename
FROM EMP
WHERE salary = (SELECT MAX(salary) FROM EMP);

Q2: SQL Commands


i) Create user Rajan having password as ‘Rajan1234’
CREATE USER Rajan IDENTIFIED BY 'Rajan1234';

ii) Assign the SELECT, DELETE privilege on Emp table to Rajan


GRANT SELECT, DELETE ON EMP TO Rajan;

iii) Revoke the SELECT privileges on Emp table from Rajan


REVOKE SELECT ON EMP FROM Rajan;

Q3: Trigger to Store Backup Entry


Create Backup Table
CREATE TABLE backup_emp (
empno INT,
ename VARCHAR(50),
job VARCHAR(50),
salary DECIMAL(10, 2),
joiningdate DATE,
DOB DATE,
deptno INT
);

Create Trigger
CREATE OR REPLACE TRIGGER trg_backup_emp
AFTER DELETE ON EMP
FOR EACH ROW
BEGIN
INSERT INTO backup_emp (empno, ename, job, salary, joiningdate, DOB, deptno)
VALUES
(:OLD.empno, :OLD.ename, :OLD.job, :OLD.salary, :OLD.joiningdate, :OLD.DOB, :OLD.deptno)
;
END;
/

Q1: EMP Table and Queries


Create Table and Insert Data
CREATE TABLE EMP (
empno INT PRIMARY KEY,
ename VARCHAR(50) NOT NULL,
job VARCHAR(50) NOT NULL,
salary DECIMAL(10, 2) CHECK (salary > 0),
joiningdate DATE NOT NULL,
DOB DATE CHECK (DOB < SYSDATE),
deptno INT NOT NULL
);

-- Insert suitable data


INSERT INTO EMP VALUES (1, 'John', 'Manager', 75000, '2010-05-10', '1985-03-25', 10);
INSERT INTO EMP VALUES (2, 'Alice', 'Developer', 60000, '2013-07-15', '1990-08-05', 20);
INSERT INTO EMP VALUES (3, 'Rahul', 'Analyst', 55000, '2018-11-20', '1992-12-10', 20);
INSERT INTO EMP VALUES (4, 'Sophia', 'Clerk', 40000, '2021-06-10', '1997-05-25', 30);
INSERT INTO EMP VALUES (5, 'Ramesh', 'Manager', 90000, '2008-04-12', '1980-09-19', 30);

i) Display employee name & employee number whose job is Manager


SELECT empno, ename
FROM EMP
WHERE job = 'Manager';

ii) Display age of employees with ename


SELECT ename, FLOOR(MONTHS_BETWEEN(SYSDATE, DOB) / 12) AS age
FROM EMP;

iii) Display total salary of all employees


SELECT SUM(salary) AS total_salary
FROM EMP;

iv) Display name of employee who earned the lowest salary


SELECT ename
FROM EMP
WHERE salary = (SELECT MIN(salary) FROM EMP);

v) Delete records of employees having deptno as 20


DELETE FROM EMP
WHERE deptno = 20;

Q2: SQL Commands


i) Create user ‘Rahul’
CREATE USER Rahul IDENTIFIED BY 'Rahul123';

ii) Grant create, select, insert, update, delete, drop privileges to ‘Rahul’
GRANT CREATE, SELECT, INSERT, UPDATE, DELETE, DROP TO Rahul;

iii) Remove the select privilege from user ‘Rahul’


REVOKE SELECT ON EMP FROM Rahul;

Q3: PL/SQL Program to Handle no_data_found Exception


Program
DECLARE
v_empno EMP.empno%TYPE := 100; -- Example non-existent empno
v_ename EMP.ename%TYPE;
BEGIN
BEGIN
SELECT ename
INTO v_ename
FROM EMP
WHERE empno = v_empno;
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_ename);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No employee found with empno: ' || v_empno);
END;
END;
/

Q1: EMP Table and SQL Queries


Create Table and Insert Data
CREATE TABLE EMP (
empno INT PRIMARY KEY,
ename VARCHAR(50) NOT NULL,
job VARCHAR(50) NOT NULL,
salary DECIMAL(10, 2) CHECK (salary > 0),
joiningdate DATE NOT NULL,
DOB DATE CHECK (DOB < SYSDATE),
deptno INT NOT NULL
);

-- Insert suitable data


INSERT INTO EMP VALUES (1, 'John', 'Manager', 75000, '2010-05-10', '1985-03-25', 10);
INSERT INTO EMP VALUES (2, 'Alice', 'Developer', 60000, '2013-07-15', '1990-08-05', 20);
INSERT INTO EMP VALUES (3, 'Rahul', 'Analyst', 40000, '2018-11-20', '1992-12-10', 20);
INSERT INTO EMP VALUES (4, 'Sophia', 'Clerk', 25000, '2021-06-10', '1997-05-25', 30);
INSERT INTO EMP VALUES (5, 'Ramesh', 'Manager', 90000, '2008-04-12', '1980-09-19', 30);

i) Display details of employees whose salary is less than 30000


SELECT *
FROM EMP
WHERE salary < 30000;

ii) Display details of employees whose salary is between 30000 to 60000


SELECT *
FROM EMP
WHERE salary BETWEEN 30000 AND 60000;

iii) Display total number of employees whose job is ‘Manager’


SELECT COUNT(*) AS total_managers
FROM EMP
WHERE job = 'Manager';
iv) Display details of employees whose name starts with 'S'
SELECT *
FROM EMP
WHERE ename LIKE 'S%';

v) Display details of employees whose salary is greater than 50000 and whose name
contains the pattern 'e'
SELECT *
FROM EMP
WHERE salary > 50000
AND ename LIKE '%e%';

Q2: SQL Commands for Sequence


i) Create a sequence with the following specifications
CREATE SEQUENCE DB_SEQ
START WITH 1
INCREMENT BY 2
MAXVALUE 10;

ii) Insert records into the Candidate table using sequence DB_SEQ
-- Assuming the Candidate table has columns (candidate_id, name)
-- Example insert using sequence DB_SEQ
INSERT INTO Candidate (candidate_id, name)
VALUES (DB_SEQ.NEXTVAL, 'John Doe');

iii) Modify the sequence DB_SEQ with the following specifications


ALTER SEQUENCE DB_SEQ
INCREMENT BY 3
MAXVALUE 20;
iv) Remove the sequence DB_SEQ from the database
DROP SEQUENCE DB_SEQ;

Q3: PL/SQL Program to Print Details of First Five Highest Salary Earning Employees
DECLARE
CURSOR emp_cursor IS
SELECT empno, ename, salary
FROM EMP
ORDER BY salary DESC;

v_empno EMP.empno%TYPE;
v_ename EMP.ename%TYPE;
v_salary EMP.salary%TYPE;
v_count INT := 0;
BEGIN
OPEN emp_cursor;

LOOP
FETCH emp_cursor INTO v_empno, v_ename, v_salary;
EXIT WHEN emp_cursor%NOTFOUND;

v_count := v_count + 1;

IF v_count <= 5 THEN


DBMS_OUTPUT.PUT_LINE('EmpNo: ' || v_empno || ', Name: ' || v_ename || ',
Salary: ' || v_salary);
END IF;
END LOOP;

CLOSE emp_cursor;
END;
/

Q1: EMP Table and SQL Queries


Create Table and Insert Data
CREATE TABLE EMP (
empno INT PRIMARY KEY,
ename VARCHAR(50) NOT NULL,
job VARCHAR(50) NOT NULL,
salary DECIMAL(10, 2) CHECK (salary > 0),
joiningdate DATE NOT NULL,
DOB DATE CHECK (DOB < SYSDATE),
deptno INT NOT NULL,
city VARCHAR(50) -- Assuming city field is added for query i
);

-- Insert suitable data


INSERT INTO EMP VALUES (1, 'John', 'Manager', 75000, '2010-05-10', '1985-03-25', 10,
'Pune');
INSERT INTO EMP VALUES (2, 'Aayush', 'Developer', 60000, '2015-07-15', '1990-08-05', 20,
'Nagpur');
INSERT INTO EMP VALUES (3, 'Rahul', 'Analyst', 55000, '2018-11-20', '1992-12-10', 20,
'Mumbai');
INSERT INTO EMP VALUES (4, 'Sophia', 'Clerk', 25000, '2021-06-10', '1997-05-25', 30, 'Pune');
INSERT INTO EMP VALUES (5, 'Ramesh', 'Manager', 90000, '2008-04-12', '1980-09-19', 50,
'Nagpur');

i) Display the empno of employee who live in city ‘Pune’ or ‘Nagpur’


SELECT empno
FROM EMP
WHERE city IN ('Pune', 'Nagpur');

ii) Change employee name, ‘Aayush’ to ‘Aayan’


UPDATE EMP
SET ename = 'Aayan'
WHERE ename = 'Aayush';

iii) Display the total number of employees whose deptno is 50


SELECT COUNT(*) AS total_employees
FROM EMP
WHERE deptno = 50;

iv) Display the name of the employee who earned the highest salary
SELECT ename
FROM EMP
WHERE salary = (SELECT MAX(salary) FROM EMP);

v) Display the average salary of all employees


SELECT AVG(salary) AS average_salary
FROM EMP;

Q2: Customer Table and SQL Commands


i) Create a view on Customer (Cust_id, Cust_name) where Cust_city is ‘Pune’
CREATE VIEW Pune_Customers AS
SELECT Cust_id, Cust_name
FROM Customer
WHERE Cust_city = 'Pune';

ii) Create a sequence S1 for Cust_id


CREATE SEQUENCE S1
START WITH 1
INCREMENT BY 1
MAXVALUE 1000;

Q3: PL/SQL Program to Print the Greatest Number Between Three Numbers Using the
CASE Statement
DECLARE
num1 INT := 10;
num2 INT := 25;
num3 INT := 15;
greatest_num INT;
BEGIN
greatest_num := CASE
WHEN num1 >= num2 AND num1 >= num3 THEN num1
WHEN num2 >= num1 AND num2 >= num3 THEN num2
ELSE num3
END;

DBMS_OUTPUT.PUT_LINE('The greatest number is: ' || greatest_num);


END;
/

You might also like