0% found this document useful (0 votes)
18 views8 pages

Files 3 2022 March NotesHubDocument 1647680510

This document contains examples of PL/SQL procedures, functions, and triggers. The examples demonstrate how to find the minimum and maximum of two values using procedures and functions, compute the square of a value using a procedure with IN OUT parameters, and create a trigger to log salary changes on the CUSTOMER table when rows are inserted, updated or deleted. The document also includes scripts to create sample tables, insert data, and perform queries on the tables.

Uploaded by

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

Files 3 2022 March NotesHubDocument 1647680510

This document contains examples of PL/SQL procedures, functions, and triggers. The examples demonstrate how to find the minimum and maximum of two values using procedures and functions, compute the square of a value using a procedure with IN OUT parameters, and create a trigger to log salary changes on the CUSTOMER table when rows are inserted, updated or deleted. The document also includes scripts to create sample tables, insert data, and perform queries on the tables.

Uploaded by

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

This program finds the minimum of two values.

Here, the procedure takes two numbers


using the IN mode and returns their minimum using the OUT parameters.

DECLARE
a number;
b number;
c number;
PROCEDURE findMin(x IN number, y IN number, z OUT number) IS
BEGIN
IF x < y THEN
z:= x;
ELSE
z:= y;
END IF;
END;
BEGIN
a:= 23;
b:= 45;
findMin(a, b, c);
dbms_output.put_line(' Minimum of (23, 45) : ' || c);
END;
/

This procedure computes the square of value of a passed value. This example shows
how we can use the same parameter to accept a value and then return another result.

DECLARE
a number;
PROCEDURE squareNum(x IN OUT number) IS
BEGIN
x := x * x;
END;
BEGIN
a:= 23;
squareNum(a);
dbms_output.put_line(' Square of (23): ' || a);
END;
/

The following example demonstrates Declaring, Defining, and Invoking a Simple


PL/SQL Function that computes and returns the maximum of two values.

DECLARE
a number;
b number;
c number;
FUNCTION findMax(x IN number, y IN number)
RETURN number
IS
z number;
BEGIN
IF x > y THEN
z:= x;
ELSE
Z:= y;
END IF;
RETURN z;
END;
BEGIN
a:= 23;
b:= 45;
c := findMax(a, b);
dbms_output.put_line(' Maximum of (23,45): ' || c);
END;
/

Drop table CUSTOMER ;


CREATE TABLE CUSTOMER (
ID INT NOT NULL, NAME VARCHAR(20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(25),
SALARY DECIMAL(10,2), PRIMARY KEY(ID) );

INSERT INTO CUSTOMER (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1,'Sumit',25,'New


Delhi',30000);
INSERT INTO CUSTOMER (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2,'Karan',24,'Geater
Noida',12000);
INSERT INTO CUSTOMER (ID,NAME,AGE,ADDRESS,SALARY) VALUES
(3,'Sonu',22,'Kota',9000);
INSERT INTO CUSTOMER (ID,NAME,AGE,ADDRESS,SALARY) VALUES
(4,'Deep',26,'Punjab',10000);
INSERT INTO CUSTOMER (ID,NAME,AGE,ADDRESS,SALARY) VALUES
(5,'Kapil',20,'U.P',28000);
SELECT * FROM CUSTOMER;

--3. Create a procedure to display the employee names, salary with salary>10000
CREATE OR REPLACE PROCEDURE getSalary
AS
BEGIN
FOR rec in (SELECT NAME,Salary,ADDRESS FROM CUSTOMER where salary >1000)
LOOP
dbms_output.put_line ('Employee Name: ' || rec.NAME ||', Salary is: ' ||
rec.SALARY);
END LOOP;
END getSalary;
/
EXECUTE getSalary;

CREATE OR REPLACE FUNCTION SAL_GRT_FUN


RETURN NUMBER IS
TOT_RECORDS NUMBER(10) := 0;
BEGIN
SELECT COUNT(*) INTO TOT_RECORDS FROM CUSTOMER WHERE SALARY > 1000;
RETURN TOT_RECORDS;
END;
/
--SET SERVEROUTPUT ON;
DECLARE
N NUMBER (10);
BEGIN
N := SAL_GRT_FUN ();
DBMS_OUTPUT.PUT_LINE (N || ' NO. OF RECORDS WITH SALARY > 15000');
END;
/

SELECT COUNT (*) FROM EMPLOYEES WHERE SALARY> 15000;

--4. Create a function returning the total number of customers in the created
table.
CREATE OR REPLACE FUNCTION totalCustomers
RETURN number IS
total number(2) := 0;
BEGIN
SELECT count(*) into total
FROM customer;
RETURN total;
END;
/
DECLARE
c number(2);
BEGIN
c := totalCustomers();
dbms_output.put_line('Total no. of Customers: ' || c);
END;
/

/*5. Create a row-level Trigger on Customer table (created in the previous


activity) for
displaying salary difference (old-new value). Trigger would fire for INSERT or
UPDATE or
DELETE operations performed on Customer table.*/
CREATE OR REPLACE TRIGGER display_salary_changes
BEFORE DELETE OR INSERT OR UPDATE ON customer
FOR EACH ROW
WHEN (NEW.ID > 0)
DECLARE
sal_diff number;
BEGIN
sal_diff := :NEW.salary - :OLD.salary;
dbms_output.put_line('Old salary: ' || :OLD.salary);
dbms_output.put_line('New salary: ' || :NEW.salary);
dbms_output.put_line('Salary difference: ' || sal_diff);
END;
/
INSERT INTO CUSTOMER (ID,NAME,AGE,ADDRESS,SALARY) VALUES (7,'Jatin',24,'New
Delhi',40000);

Drop table EMPLOYEE ;


Drop table DEPARTMENT ;
Drop table DEPT_LOCATIONS ;
Drop table PROJECT ;
Drop table WORKS_ON ;
Drop table DEPENDENT ;
ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD ';

CREATE TABLE EMPLOYEE (


FNAME VARCHAR(15) NOT NULL, MINIT CHAR(1) NULL, LNAME VARCHAR(15) NOT NULL,
SSN CHAR(9) NOT NULL, BDATE DATE, ADDRESS VARCHAR(30) NULL,
SEX CHAR(1) NULL, SALARY DECIMAL(10,2) NULL, SUPERSSN CHAR(9) NULL,
DNO INT NOT NULL, PRIMARY KEY(Ssn) );

CREATE TABLE DEPARTMENT (


DNAME VARCHAR(15) NOT NULL, DNUMBER INT NOT NULL, MGRSSN CHAR(9) NOT NULL,
MGRSTARTDATE DATE, PRIMARY KEY(DNUMBER), UNIQUE(DNAME) );

CREATE TABLE DEPT_LOCATIONS (


DNUMBER INT NOT NULL, DLOCATION VARCHAR(15) NOT NULL,
PRIMARY KEY(DNUMBER,DLOCATION) );

CREATE TABLE PROJECT (


PNAME VARCHAR(15) NOT NULL, PNUMBER INT NOT NULL, PLOCATION VARCHAR(15) NULL,
DNUM INT NOT NULL, PRIMARY KEY (PNUMBER), UNIQUE(PNAME) );

CREATE TABLE WORKS_ON (


ESSN char(9) NOT NULL, PNO INT NOT NULL, HOURS DECIMAL(3,1) NULL,
PRIMARY KEY(ESSN,PNO) );

CREATE TABLE DEPENDENT (


ESSN CHAR(9) NOT NULL, DEPENDENT_NAME VARCHAR(15) NOT NULL,
SEX CHAR(1) NULL, BDATE DATE, RELATIONSHIP VARCHAR(8) NULL,
PRIMARY KEY(ESSN, DEPENDENT_NAME) );

INSERT INTO DEPARTMENT VALUES ('Research',5,'333445555','1988-05-22');


INSERT INTO DEPARTMENT VALUES ('Administration',4,'987654321','1995-01-01');
INSERT INTO DEPARTMENT VALUES ('Headquarters',1,'888665555','1981-06-19');

INSERT INTO DEPENDENT (Essn,Dependent_name,Sex,Bdate,Relationship) VALUES


('123456789','Alice','F','1988-12-30','Daughter');
INSERT INTO DEPENDENT (Essn,Dependent_name,Sex,Bdate,Relationship) VALUES
('333445555','Theodore','M','1983-10-25','Son');
INSERT INTO DEPENDENT (Essn,Dependent_name,Sex,Bdate,Relationship) VALUES
('333445555','Joy','F','1958-05-03','Spouse');
INSERT INTO DEPENDENT (Essn,Dependent_name,Sex,Bdate,Relationship) VALUES
('987654321','Abner','M','1942-02-28','Spouse');
INSERT INTO DEPENDENT (Essn,Dependent_name,Sex,Bdate,Relationship) VALUES
('123456789','Michael','M','1988-01-04','Son');
INSERT INTO DEPENDENT (Essn,Dependent_name,Sex,Bdate,Relationship) VALUES
('333445555','Alice','F','1986-04-05','Daughter');
INSERT INTO DEPENDENT (Essn,Dependent_name,Sex,Bdate,Relationship) VALUES
('123456789','Elizabeth','F','1967-05-05','Spouse');

INSERT INTO DEPT_LOCATIONS (Dnumber,Dlocation) VALUES (1,'Houston');


INSERT INTO DEPT_LOCATIONS (Dnumber,Dlocation) VALUES (4,'Stafford');
INSERT INTO DEPT_LOCATIONS (Dnumber,Dlocation) VALUES (5,'Bellaire');
INSERT INTO DEPT_LOCATIONS (Dnumber,Dlocation) VALUES (5,'Sugarland');
INSERT INTO DEPT_LOCATIONS (Dnumber,Dlocation) VALUES (5,'Houston');
INSERT INTO EMPLOYEE (Fname,Minit,Lname,Ssn,Bdate,Address,Sex,Salary,Superssn,Dno)
VALUES ('John','B','Smith','123456789','1965-01-09','731 Fondren, Houston,
TX','M',30000,'333445555',5);
INSERT INTO EMPLOYEE (Fname,Minit,Lname,Ssn,Bdate,Address,Sex,Salary,Superssn,Dno)
VALUES ('Franklin','T','Wong','333445555','1955-12-08','638 Boss, Houston,
TX','M',40000,'888665555',5);
INSERT INTO EMPLOYEE (Fname,Minit,Lname,Ssn,Bdate,Address,Sex,Salary,Superssn,Dno)
VALUES ('Alicia','J','Zelaya','999887777','1968-01-19','3321 Castle, Spring,
TX','F',25000,'987654321',4);
INSERT INTO EMPLOYEE (Fname,Minit,Lname,Ssn,Bdate,Address,Sex,Salary,Superssn,Dno)
VALUES ('Jennifer','S','Wallace','987654321','1941-06-20','291 Berry, Bellaire,
TX','F',43000,'888665555',4);
INSERT INTO EMPLOYEE (Fname,Minit,Lname,Ssn,Bdate,Address,Sex,Salary,Superssn,Dno)
VALUES ('Ramesh','K','Narayan','666884444','1962-09-15','975 Fire Oak, Humble,
TX','M',38000,'333445555',5);
INSERT INTO EMPLOYEE (Fname,Minit,Lname,Ssn,Bdate,Address,Sex,Salary,Superssn,Dno)
VALUES ('Joyce','A','English','453453453','1972-07-31','5631 Rice, Houston,
TX','F',25000,'333445555',5);
INSERT INTO EMPLOYEE (Fname,Minit,Lname,Ssn,Bdate,Address,Sex,Salary,Superssn,Dno)
VALUES ('Ahmad','V','Jabbar','987987987','1969-03-29','980 Dallas, Houston,
TX','M',25000,'987654321',4);
INSERT INTO EMPLOYEE (Fname,Minit,Lname,Ssn,Bdate,Address,Sex,Salary,Superssn,Dno)
VALUES ('James','E','Borg','888665555','1937-11-10','450 Stone,Houston,
TX','M',55000,null,1);

INSERT INTO PROJECT (Pname,Pnumber,Plocation,Dnum) VALUES


('ProductX',1,'Bellaire',5);
INSERT INTO PROJECT (Pname,Pnumber,Plocation,Dnum) VALUES
('ProductY',2,'Sugarland',5);
INSERT INTO PROJECT (Pname,Pnumber,Plocation,Dnum) VALUES
('ProductZ',3,'Houston',5);
INSERT INTO PROJECT (Pname,Pnumber,Plocation,Dnum) VALUES
('Computerization',10,'Stafford',4);
INSERT INTO PROJECT (Pname,Pnumber,Plocation,Dnum) VALUES
('Reorganization',20,'Houston',1);
INSERT INTO PROJECT (Pname,Pnumber,Plocation,Dnum) VALUES
('Newbenefits',30,'Stafford',4);

INSERT INTO WORKS_ON (Essn,Pno,Hours) VALUES ('123456789',1,32.5);


INSERT INTO WORKS_ON (Essn,Pno,Hours) VALUES ('123456789',2,7.5);
INSERT INTO WORKS_ON (Essn,Pno,Hours) VALUES ('666884444',3,40);
INSERT INTO WORKS_ON (Essn,Pno,Hours) VALUES ('453453453',1,20);
INSERT INTO WORKS_ON (Essn,Pno,Hours) VALUES ('453453453',2,20);
INSERT INTO WORKS_ON (Essn,Pno,Hours) VALUES ('333445555',2,10);
INSERT INTO WORKS_ON (Essn,Pno,Hours) VALUES ('333445555',3,10);
INSERT INTO WORKS_ON (Essn,Pno,Hours) VALUES ('333445555',10,10);
INSERT INTO WORKS_ON (Essn,Pno,Hours) VALUES ('333445555',20,10);
INSERT INTO WORKS_ON (Essn,Pno,Hours) VALUES ('999887777',30,30);
INSERT INTO WORKS_ON (Essn,Pno,Hours) VALUES ('999887777',10,10);
INSERT INTO WORKS_ON (Essn,Pno,Hours) VALUES ('987987987',10,35);
INSERT INTO WORKS_ON (Essn,Pno,Hours) VALUES ('987987987',30,5);
INSERT INTO WORKS_ON (Essn,Pno,Hours) VALUES ('987654321',30,20);
INSERT INTO WORKS_ON (Essn,Pno,Hours) VALUES ('987654321',20,15);
INSERT INTO WORKS_ON (Essn,Pno,Hours) VALUES ('888665555',20,NULL);

SELECT * FROM EMPLOYEE ;


SELECT * FROM DEPARTMENT ;
SELECT * FROM DEPT_LOCATIONS ;
SELECT * FROM PROJECT ;
SELECT * FROM WORKS_ON ;
SELECT * FROM DEPENDENT ;

/*Query 0: Retrieve the birthdate and address of the employee whose name is 'John
B. Smith'.*/
SELECT BDATE, ADDRESS FROM EMPLOYEE WHERE FNAME='John' AND MINIT='B' AND
LNAME='Smith';

/*Query 1: Retrieve the name and address of all employees who work for the
'Research' department.*/
SELECT FNAME, LNAME, ADDRESS FROM EMPLOYEE, DEPARTMENT WHERE DNAME='Research' AND
DNUMBER=DNO ;
SELECT FNAME, LNAME, ADDRESS FROM EMPLOYEE WHERE DNO IN (SELECT DNUMBER FROM
DEPARTMENT WHERE DNAME='Research');
SELECT FNAME, LNAME, ADDRESS FROM (EMPLOYEE JOIN DEPARTMENT ON DNUMBER=DNO) WHERE
DNAME='Research';

/*Query 2: For every project located in 'Stafford', list the project number, the
controlling department number, and the department manager's
last name, address, and birthdate.*/
SELECT PNUMBER, DNUM, LNAME, BDATE, ADDRESS FROM PROJECT, DEPARTMENT, EMPLOYEE
WHERE DNUM=DNUMBER AND MGRSSN=SSN AND PLOCATION='Stafford';
SELECT PNUMBER, DNUM, LNAME, BDATE, ADDRESS FROM (PROJECT JOIN DEPARTMENT ON
DNUM=DNUMBER) JOIN EMPLOYEE ON MGRSSN=SSN WHERE PLOCATION='Stafford';

/*Query 3: Retrieve the name of each employee who works on all the projects
controlled by department number 5.*/
SELECT FNAME, LNAME FROM EMPLOYEE WHERE (SELECT PNO FROM WORKS_ON WHERE
SSN=ESSN) CONTAINS (SELECT PNUMBER FROM PROJECT WHERE DNUM=5) ;

/*Query 4: Make a list of all project numbers for projects that involve an employee
whose last name is 'Smith'
as a worker or as a manager of the department that controls the project.*/
SELECT PNAME FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE DNUM=DNUMBER AND MGRSSN=SSN
AND LNAME='Smith';
SELECT PNAME FROM PROJECT, WORKS_ON, EMPLOYEE WHERE PNUMBER=PNO AND ESSN=SSN AND
LNAME='Smith';

/* Query 6: Retrieve the names of employees who have no dependents.*/


SELECT FNAME, LNAME FROM EMPLOYEE WHERE NOT EXISTS (SELECT * FROM DEPENDENT
WHERE SSN=ESSN);

/*Query 8: For each employee, retrieve the employee's name, and the name of his or
her immediate supervisor.*/
SELECT E.FNAME, E.LNAME, S.FNAME, S.LNAME FROM EMPLOYEE E S WHERE
E.SUPERSSN=S.SSN;
SELECT E.FNAME, E.LNAME, S.FNAME, S.LNAME FROM (EMPLOYEE E LEFT OUTER JOIN
EMPLOYEES ON E.SUPERSSN=S.SSN);

/*Query 9: Retrieve the SSN values for all employees.*/


SELECT SSN FROM EMPLOYEE;

/*Query 12: Retrieve the name of each employee who has a dependent with the same
first name as the employee.*/
SELECT E.FNAME, E.LNAME FROM EMPLOYEE E, DEPENDENT D WHERE E.SSN=D.ESSN AND
E.FNAME=D.DEPENDENT_NAME;
SELECT FNAME, LNAME FROM EMPLOYEE WHERE EXISTS (SELECT * FROM DEPENDENT WHERE
SSN=ESSN AND FNAME=DEPENDENT_NAME);

/*Query 13: Retrieve the social security numbers of all employees who work on
project number 1, 2, or 3.*/
SELECT DISTINCT ESSN FROM WORKS_ON WHERE PNO IN (1, 2, 3);

/*Query 14: Retrieve the names of all employees who do not have supervisors.*/
SELECT FNAME, LNAME FROM EMPLOYEE WHERE SUPERSSN IS NULL ;

/*Query 15: Find the maximum salary, the minimum salary, and the average salary
among all employees.*/
SELECT MAX(SALARY), MIN(SALARY), AVG(SALARY) FROM EMPLOYEE;

/*Query 16: Find the maximum salary, the minimum salary, and the average salary
among employees who work for the 'Research' department.*/
SELECT MAX(SALARY), MIN(SALARY), AVG(SALARY) FROM EMPLOYEE, DEPARTMENT WHERE
DNO=DNUMBER AND DNAME='Research';

/*Queries 17 and 18: Retrieve the total number of employees in the company (Q17),
and the number of employees in the 'Research' department (Q18).*/
SELECT COUNT (*) FROM EMPLOYEE;
SELECT COUNT (*) FROM EMPLOYEE, DEPARTMENT WHERE DNO=DNUMBER AND
DNAME='Research';

/*Query 20: For each department, retrieve the department number, the number of
employees in the department, and their average salary.*/
SELECT DNO, COUNT (*), AVG (SALARY) FROM EMPLOYEE GROUP BY DNO;

/*Query 21: For each project, retrieve the project number, project name, and the
number of employees who work on that project.*/
SELECT PNUMBER, PNAME, COUNT (*) FROM PROJECT, WORKS_ON WHERE PNUMBER=PNO GROUP BY
PNUMBER, PNAME;

/*Query 22: For each project on which more than two employees work , retrieve the
project number, project name, and the number
of employees who work on that project.*/
SELECT PNUMBER, PNAME, COUNT (*) FROM PROJECT, WORKS_ON WHERE PNUMBER=PNO GROUP
BY PNUMBER, PNAME HAVING COUNT (*) > 2;

/*Query 25: Retrieve all employees whose address is in Houston, Texas. Here, the
value of the ADDRESS attribute must contain the substring 'Houston,TX'.*/
SELECT FNAME, LNAME FROM EMPLOYEE WHERE ADDRESS LIKE '%Houston,TX%';

/*Query 26: Retrieve all employees who were born during the 1950s. Here, '5' must
be the 8th character of the string (according to our format for date),
so the BDATE value is '_______5_', with each underscore as a place holder for a
single arbitrary character.*/
SELECT FNAME, LNAME FROM EMPLOYEE WHERE BDATE LIKE '_______5_';

/*Query 27: Show the effect of giving all employees who work on the 'ProductX'
project a 10% raise.*/
SELECT FNAME, LNAME, 1.1*SALARY FROM EMPLOYEE, WORKS_ON, PROJECT WHERE SSN=ESSN
AND PNO=PNUMBER AND PNAME='ProductX';
/*Query 28: Retrieve a list of employees and the projects each works in, ordered by
the employee's department, and within each department ordered
alphabetically by employee last name.*/
SELECT DNAME, LNAME, FNAME, PNAME FROM DEPARTMENT, EMPLOYEE, WORKS_ON, PROJECT
WHERE DNUMBER=DNO AND SSN=ESSN AND PNO=PNUMBER ORDER BY DNAME, LNAME;

You might also like