Introduction to Oracle
An Oracle database is a collection of data treated as a unit. The purpose of a
database is to store and retrieve related information. A database server is the key to
solving the problems of information management. In general, a server reliably
manages a large amount of data in a multiuser environment so that many users can
concurrently access the same data. All this is accomplished while delivering high
performance. A database server also prevents unauthorized access and provides
efficient solutions for failure recovery.
Oracle Database is the first database designed for enterprise grid computing, the
most flexible and cost effective way to manage information and applications.
Enterprise grid computing creates large pools of industry-standard, modular
storage and servers. With this architecture, each new system can be rapidly
provisioned from the pool of components. There is no need for peak workloads,
because capacity can be easily added or reallocated from the resource pools as
needed.
The database has logical structures and physical structures. Because the physical
and logical structures are separate, the physical storage of data can be managed
without affecting the access to logical storage structures
1
History of Oracle
The different products related to oracle are developed during different years.
These years are:-
1977: Larry Ellison and friends founded Software Development Laboratories.
1979: SDL changed its company-name to "Relational Software, Inc." (RSI) and
introduced its product Oracle V2 as an early commercially available relational
database system. The version did not support transactions, but implemented
the basic SQL functionality of queries and joins. (RSI never released a version 1
- instead calling the first version version 2 as a marketing gimmick.)[40]
1982: RSI in its turn changed its name, becoming known as "Oracle
Corporation",[41] to align itself more closely with its flagship product.
1983: The company released Oracle version 3, which it had re-written using
the C programming language and which supported
COMMIT and ROLLBACK functionality for transactions. Version 3 extended
platform support from the existing Digital VAX/VMS systems to
include Unix environments.[41]
1984: Oracle Corporation released Oracle version 4, which supported read-
consistency.
1985: Oracle Corporation released Oracle version 5, which supported
the clientserver modela sign of networks becoming more widely available
in the mid-1980s.
1986: Oracle version 5.1 started supporting distributed queries.
1988: Oracle RDBMS version 6 came out with support for PL/SQL embedded
within Oracle Forms v3 (version 6 could not store PL/SQL in the database
proper), row-level locking and hot backups.[42]
2
1989: Oracle Corporation entered the application products market and
developed its ERP product, (later to become part of the Oracle E-Business
Suite), based on the Oracle relational database.
1990: the release of Oracle Applications release 8[41]
1992: Oracle version 7 appeared with support for referential integrity, stored
procedures and triggers.
1997: Oracle Corporation released version 8, which supported object-
oriented development and multimedia applications.
1999: The release of Oracle8i aimed to provide a database inter-operating
better with the Internet (the i in the name stands for "Internet"). The
Oracle8i database incorporated a native Java virtual machine (Oracle JVM, also
known as "Aurora".[43]).
2000: Oracle E-Business Suite 11i pioneers integrated enterprise application
software[41]
2001: Oracle9i went into release with 400 new features, including the ability to
read and write XML documents. 9i also provided an option for Oracle RAC, or
"Real Application Clusters", a computer-cluster database, as a replacement for
the Oracle Parallel Server(OPS) option.
2003: Oracle Corporation released Oracle Database 10g, which
supported regular expressions. (The g stands for "grid"; emphasizing a
marketing thrust of presenting 10g as "grid computing ready".)
2005: Oracle Database 10.2.0.1also known as Oracle Database 10g Release 2
(10gR2)appeared.
2006: Oracle Corporation announces Unbreakable Linux[41]
2007: Oracle Database 10g release 2 sets a new world record TPC-H 3000
GB benchmark result[44]
2007: Oracle Corporation released Oracle Database 11g for Linux and
for Microsoft Windows.
3
2008: Oracle Corporation acquires BEA Systems.
2010: Oracle Corporation acquires Sun Microsystems.
2011: Oracle Corporation acquires web content management
system FatWire Software.
Versions of Oracle
Oracle has many versions whish are listed below:-
Oracle products follow a custom release numbering and naming convention. With
the Oracle RDBMS 10g release, Oracle Corporation began using the "10g" label in
all versions of its major products, although some sources refer to Oracle
Applications Release 11i as Oracle 11i. The suffixes "i" and "g" do not actually
represent a low-order part of the version number, as letters typically represent in
software industry version numbering; that is, there is no predecessor version of
Oracle 10g called Oracle 10f.
Major database-related products and some of their versions include:
Oracle Application Server 10g (also known as "Oracle AS 10g"):
a middleware product;
Oracle Applications Release 11i (aka Oracle e-Business Suite, Oracle
Financials or Oracle 11i): a suite of business applications;
Oracle Developer Suite 10g (9.0.4);
Oracle JDeveloper 10g: a Java integrated development environment;
Since version 5, Oracle's RDBMS release numbering has used the following codes:
Oracle v5
Oracle v6
4
Oracle7: 7.0.167.3.4
Oracle8 Database: 8.0.38.0.6
Oracle8i Database Release 1: 8.1.5.08.1.5.1
Oracle8i Database Release 2: 8.1.6.08.1.6.3
Oracle8i Database Release 3: 8.1.7.08.1.7.4
Oracle9i Database Release 1: 9.0.1.09.0.1.5 (patchset as of December
2003)
Oracle9i Database Release 2: 9.2.0.19.2.0.8 (patchset as of April 2007)
Oracle Database 10g Release 1: 10.1.0.210.1.0.5 (patchset as of February
2006)
Oracle Database 10g Release 2: 10.2.0.110.2.0.5 (patchset as of April 2010)
Oracle Database 11g Release 1: 11.1.0.611.1.0.7 (patchset as of September
2008)
Oracle Database 11g Release 2: 11.2.0.111.2.0.3 (patchset as of September
2011)
The version-numbering syntax within each release follows the pattern:
major.maintenance.application-server.component-specific.platform-specific.
For example, "10.2.0.1 for 64-bit Solaris" means: 10th major version of Oracle,
maintenance level 2, Oracle Application Server (OracleAS) 0, level 1 for Solaris
64-bit.
The Oracle Administrator's Guide offers further information on Oracle release
numbers.
5
Oracle Server Features
This chapter provides an overview of some of the features of the Oracle server. The
topics include:
Internet Computing and Distributed Databases
Advanced Queuing Overview
Data Warehousing Overview
Data Access Overview
Database Security Overview
Database Backup and Recovery Overview
Introduction to Oracle9i Data Guard
Log Miner SQL-Based Log Analyzer Overview
6
Oracle Database Features
Oracle includes several software mechanisms to fulfill the following important
requirements of an information management system:
Data concurrency of a multiuser system must be maximized.
Data must be read and modified in a consistent fashion. The data a user is
viewing or changing is not changed (by other users) until the user is finished
with the data.
High performance is required for maximum productivity from the many
users of the database system.
This contains the following sections:
Concurrency
Read Consistency
Locking Mechanisms
Quiesce Database
7
Real Application Clusters
Portability
Concurrency
A primary concern of a multiuser database management system is how to
control concurrency, which is the simultaneous access of the same data by many
users. Without adequate concurrency controls, data could be updated or changed
improperly, compromising data integrity.
One way to manage data concurrency is to make each user wait for a turn. The goal
of a database management system is to reduce that wait so it is either nonexistent
or negligible to each user. All data manipulation language statements should
proceed with as little interference as possible, and destructive interactions between
concurrent transactions must be prevented. Destructive interaction is any
interaction that incorrectly updates data or incorrectly alters underlying data
structures. Neither performance nor data integrity can be sacrificed.
Read Consistency
Read consistency, as supported by Oracle, does the following:
Guarantees that the set of data seen by a statement is consistent with respect
to a single point in time and does not change during statement execution
(statement-level read consistency)
Ensures that readers of database data do not wait for writers or other readers
of the same data
Ensures that writers of database data do not wait for readers of the same data
Ensures that writers only wait for other writers if they attempt to update
identical rows in concurrent transactions
The simplest way to think of Oracle's implementation of read consistency is to
imagine each user operating a private copy of the database, hence the
8
Locking Mechanisms
Oracle also uses locks to control concurrent access to data. When updating
information, the data server holds that information with a lock until the
update is submitted or committed. Until that happens, no one else can
make changes to the locked information. This ensures the data integrity of
the system.
Oracle provides unique non-escalating row-level locking. Unlike other data servers
that escalate locks to cover entire groups of rows or even the entire table,
Oracle always locks only the row of information being updated. Because Oracle
includes the locking information with the actual rows themselves, Oracle can lock
an unlimited number of rows so users can work concurrently without unnecessary
delays.There are two types of locking:-
Automatic Locking
Manual Locking
Client Server Architecture
Client-server architecture can be considered as a network environment that exchanges
information between a server machine and a client machine where server has some resources
that can be shared by different clients.
In a Client/server architecture individual computers (known as clients) are connected to a central
computer which is known as ?server?.
Let?s take an example of a file server to understand the core process of a client/server network,
the file server acts as a storage space on the network for the files, spreadsheets, databases, etc.
Instead of storing these records on every individual computer, the file server allows the clients to
store their files on one central computer and make them sharable. The client-server architecture
is beneficial in reducing the multiple iterations of a single file and allowing the organization to
have one centralized point for every computer to access the same file.
9
The interaction between a lamp and an electrical socket can be considered as a
interaction between client and server is just like. In the example the electrical
socket is just like a server and the lamp works like a client.
Types of client server architecture
1) Two tier architectures In two tier client/server architectures, the user interface
is placed at user's desktop environment and the database management system
services are usually in a server that is a more powerful machine that provides
services to the many clients. Information processing is split between the user
system interface environment and the database management server environment.
The database management server supports for stored procedures and triggers.
Software vendors provide tools to simplify development of applications for the two
tier client/server architecture.
2) Three tier architectures The three tier architecture is introduced to overcome
the drawbacks of the two tier architecture. In the three tier architecture, a
middleware is used between the user system interface client environment and the
database management server environment. These middleware are implemented in a
variety of ways such as transaction processing monitors, message servers or
application servers. The middleware perform the function of queuing, application
10
execution and database staging. In addition the middleware adds scheduling and
prioritization for work in progress. The three tier client/server architecture is used
to improve performance for large number of users and also improves flexibility
when compared to the two tier approach. The drawback of three tier architectures
is that the development environment is more difficult to use than the development
of two tier applications.
i) Three tier with message server. In this architecture, messages are processed and
prioritized asynchronously. Messages have headers that include priority
information, address and identification number. The message server links to the
relational DBMS and other data sources. Messaging systems are alternative for
wireless infrastructures.
ii) Three tier with an application server This architecture allows the main body of
an application to run on a shared host rather than in the user system interface client
environment. The application server shares business logic, computations and a data
retrieval engine. In this architecture applications are more scalable and installation
costs are less on a single server than maintaining each on a desktop client.
Table Creation
1. CREATE A TABLE NAMED EMP WITH COLUMNS ENO, ENAME,
SALARY, DEPT, DESG.
Create table emp(eno number(2),ename varchar(10),salary
number(10),dept number(5),desg varchar(10),comm.
number(5),basic_pay number(5));
ENO ENAME SALARY DEPT DESG COMM BASIC_PAY
1 Aman 15000 10 clerk 500 1000
2 Simran 25000 20 manager 1000 1500
3 Karampreet 12000 30 salesman 200 500
4 Gurnoor 8000 10 clerk 200 1000
5 Hardeep 11000 30 salesman 200 500
11
6 Manjeet 27000 50 admin - 2000
7 Abhinav 15000 60 manager - 2000
2: WRITE A QUERY TO DISPLAY THE NAME OF EMPLOYEE OF
DEPARTMENT 10?
SELECT ENAME FROM EMP WHERE DEPT_NO=10;
ENAME
Aman
Simran
Karampreet
Manjot
Gurpreet
Gurnoor
3: WRITE A QUERY TO DISPLAY THE NAME AND SALARY OF
MANAGER?
SELECT ENAME, SALARY FROM EMP WHERE DESG='MANAGER';
ENAME SALARY
Simran 55000
abhinav 45000
4: WRITE A QUERY TO DISPLAY THE NAME OF MANAGER OF
DEPARTMENT 10?
SELECT ENAME,SALARY FROM EMP WHERE DESG='MANAGER' AND DEPT_NO=10;
ENAME SALARY
12
Simran 55000
5:WRITE A QUERY TO DISPLAY THE NAME OF MANAGER OF
DEPARTMENT 10 WHOSE SALARY IS GREATER THAN 50,000
?
SELECT ENAME,SALARY AND DEPT_NO FROM EMP WHERE DESG='MANAGER' AND
SALARY>50000 AND DEPT_NO=10;
ENAME SALARY
Simran 55000
6:WRITE A QUERY TO DISPLAY THE NAME OF STUDENT WHOSE
MARKS ARE GREATER THAN 40 AND LESS THAN 80?
SELECT ROLLONO,NAME FROM STU WHERE MARKS>40 AND MARKS<80;
ROLLNO NAME
1 Meenakshi
2 Sandeep
6 Rimal
7 Ranju
7: WRITE A QUERY TO DISPLAY THE DETAIL OF ROLL NO 1,5,7?
SELECT ROLLNO,NAME FROM STU WHERE RNO=1 OR RNO=5 OR RNO=7;
ROLLNO NAME
1 Meenakshi
13
5 Rajneet
7 Ranju
8: WRITE A QUERY TO DISPLAY THE STATUS AND NAME OF
ROLLNO 5,7?
SELECT STATUS,NAME FROM STU WHERE RNO=5 OR RNO=7;
STATUS NAME
F Rajneet
P Ranju
9: WRITE A QUERY TO DISPLAY THE NAME AND DEPARTMENT
NUMBER OF MANAGER IS 10 AND SALARY IS GREATER THAN
10,000?
SELECT ENAME,SALARY FROM EMP WHERE DESG='MANAGER' AND DEPT_NO=10 AND
SALARY>10000;
ENAME SALARY
Simran 55000
10: WRITE A QUERY TO DISPLAY THE NAME AND MARKS OF
STUDENTS WHOSE STATUS IS FAIL?
SELECT MARKS,NAME FROM EMP WHERE STATUS=FAIL ;
STATUS NAME
30 Rajneet
23 Sarabjit
20 Ikjot
11 Palak
14
11: WRITE A QUERY TO UPDATE THE SALARY OF SALESMAN OF
DEPARTMENT NUMBER 10 TO 12,000?
UPDATE EMP SET SALARY=12000 WHERE DEPT_NO=10 AND DESG='SALESMAN';
SELECT * FROM EMP;
ENO ENAME SALARY DEPT DESG COMM BASIC_PAY
1 Aman 12000 10 Salesman 500 1000
4 Simran 12000 10 Salesman 1000 1500
9 karampreet 12000 10 Salesman 200 500
12: WRITE A QUERY TO UPDATE THE MARKS OF ROLLNO 10 TO
15?
UPDATE STU SET MARKS=15 WHERE RNO=10;
SELECT RNO,MARKS FROM STU WHERE RNO=10;
RNO MARKS
10 15
13: WRITE A QUERY TO UPDATE THE STATUS OF ALL STUDENTS
TO FAIL WHOSE MARKS ARE LESS THAN 15?
UPDATE STU SET STATUS='FAIL' WHERE MARKS<15;
SELECT RNO,STATUS FROM STU WHERE STATUS=FAIL;
15
RNO STATUS
4 FAIL
8 FAIL
10 F AIL
14: WRITE A QUERY TO DELETE THE DETAILS OS DEPARTMENT
NUMBER 20 WHO WORK AS SALESMAN?
DELETE FROM EMP WHERE DEP_NO=20 AND DESG='SALESMAN';
SELECT * FROM EMP;
ENO ENAME SALARY DEPT DESG COMM BASIC_PAY
1 Aman 15000 10 clerk 500 1000
2 Simran 25000 20 manager 1000 1500
3 Karampreet 12000 30 salesman 200 500
6 Gurnoor 8000 10 clerk 200 1000
7 Hardeep 11000 30 salesman 200 500
8 Manjeet 27000 50 admin - 2000
9 Abhinav 15000 60 manager - 2000
15: WRITE A QUERY TO UPDATE THE SALARY OF ALL MANAGER
TO 50,000?
UPDATE EMP SET SALARY=50000 WHERE DESG='MANAGER';
SELECT * FROM EMP WHERE DESG=MANAGER;
ENO ENAME SALARY DEPT DESG COMM BASIC_PAY
16
2 simran 50000 20 manager 1000 1500
9 Abhinav 50000 60 Manager - 2000
16: WRITE A QUERY TO UPDATE THE STATUS OF ROLLNO 5 TO
ABSENT?
UPDATE STU SET STATUS='ABSENT' WHERE RNO=5;
SELCT STATUS,RNO FROM STU WHERE RNO=5;
STATUS RNO
Absent 5
17: WRITE A QUERY TO DISPLAY THE DETAILS OF MANAGER OF
DEPARTMENT NUMBER 10,20 WHOSE SALARY IS GREATER
THAN 50,000 AND LESS THAN 80,000?
SELECT * FROM EMP WHERE DESG='MANAGER' AND DEPT_NO=10 OR DEPT_NO=20 AND
SALARY>50000 AND SALARY<80000;
ENO ENAME SALARY DEPT DESG COMM BASIC_PAY
2 simran 85000 10 Manager 1000 1500
9 abhinav 55000 20 Manager - 2000
17
CREATING TABLE AND INSERTING DATA
1: STUDENT TABLE
CREATE TABLE STUDENT(RNO NUMBER(10),NAME VARCHAR(20),ENGLISH
NUMBER(7),C NUMBER(10),CSM NUMBER(10));
INSERT INTO STUDENT (RNO,NAME,ENGLISH,C,CSM) VALUES(1,'ROHIT',27,54,44);
INSERT INTO STUDENT (RNO,NAME,ENGLISH,C,CSM)
VALUES(2,'SIMRAN',50,74,49);
INSERT INTO STUDENT (RNO,NAME,ENGLISH,C,CSM) VALUES(3,'RAJ',72,84,86);
INSERT INTO STUDENT (RNO,NAME,ENGLISH,C,CSM) VALUES(4,'RIMAL',72,74,88);
INSERT INTO STUDENT (RNO,NAME,ENGLISH,C,CSM)
VALUES(5,'SANDEEP',33,55,44);
INSERT INTO STUDENT (RNO,NAME,ENGLISH,C,CSM)
VALUES(6,'MANJOT',76,59,88);
SELECT * FROM STUDENT;
RNO NAME ENGLISH C CSM
1 ROHIT 27 54 44
2 SIMRAN 50 74 49
3 RAJ 72 84 86
4 RIMAL 72 74 88
5 SANDEEP 33 55 44
6 MANJOT 76 59 88
18
2: EMPLOYEE TABLE
CREATE EMP(DEPTNO NUMBER(20),NAME VARCHAR(20),SALARY
NUMBER(10),DESG VARCHAR(20));
INSERT INTO EMP(DEPTNO,NAME,SALARY,DESG) VALUES
(10,'RIMAL',10,000,'MANAGER');
INSERT INTO EMP(DEPTNO,NAME,SALARY,DESG) VALUES
(20,'SANDEEP',5,000,'SALESMAN');
INSERT INTO EMP(DEPTNO,NAME,SALARY,DESG) VALUES
(30,'JASDEEP',2,000,'CLERK');
INSERT INTO EMP(DEPTNO,NAME,SALARY,DESG) VALUES
(20,'ARJIT',10,000,'MANAGER');
SELECT * FROM EMP;
DEPTNO NAME SALARY DESG
10 RIMAL 10000 MANAGER
20 SANDEEP 5000 SALESMAN
30 JASDEEP 2000 CLERK
20 ARJIT 10000 MANAGER
19
IMPLEMENTING DML STATEMENTS
1: WRITE A QUERY TO DISPLAY THE DETAILS OF THE STUDENT
NAME START WITH M?
SELECT * FROM STUDENT WHERE NAME LIKE 'M%';
RNO NAME ENGLISH C CSM
6 MANJOT 76 59 88
2: WRITE A QUERY TO DISPLAY THE ROLL NO AND TOTAL MARKS
OF STUDENT?
SELECT RNO,ENGLISH+C+CSM AS "TOTAL MARKS" FROM STUDENT;
RNO TOTAL MARKS
1 125
2 173
3 242
4 234
5 132
6 223
3: WRITE A QUERY TO DISPLAY THE ROLL NO AND NAME OF ALL
STUDENTS WHOSE MARKS ARE GREATER THAN 150?
SELECT RNO,NAME FROM STUDENT WHERE ENGLISH+C+CSM>150;
20
RNO NAME
2 SIMRAN
3 RAJ
4 RIMAL
6 MANJOT
4: WRITE A QUERY TO DISPLAY THE MARKS IN CSM ORDER BY
ROLL NO AND MARKS IN CSM?
SELECT CSM FROM STUDENT ORDER BY RNO,CSM;
CSM
44
44
49
86
88
88
5: WRITE A QUERY TO DISPLAY THE NAME AND ROLL NO OF
STUDENT WHO HAS NOT ATTEMPTED ANY ONE PAPER?
SELECT NAME,RNO FROM STUDENT WHERE STATUS='ABSENT';
NAME RNO
SANDEEP 5
21
6: WRITE A QUERY TO DISPLAY THE DETAILS OF ALL
EMPLOYEES OF DEPARTMENT NO 10 AND 20?
SELECT * FROM EMP WHERE DEPTNO=10 OR DEPTNO=20;
ENO ENAME SALARY DEPT DESG COMM BASIC_PAY
1 aman 15000 10 Clerk 500 1000
2 simran 25000 20 manager 1000 1500
6 gurnoor 8000 10 Clerk 200 1000
9 abhinav 15000 10 manager - 2000
7: WRITE A QUERY TO CALCULATE THE 5% BONUS ON SALARY?
SELECT 0.05*SALARY AS "BONUS" FROM EMP;
BONUS
750
1250
600
500
850
400
22
550
1350
750
8: WRITE A QUERY TO DISPLAY THE NAME,DESIGNATION AND
TOTAL SALARY OF ALL EMPLOYEES AND ARRANGE THEM BY
DEPARTMENT NO?
SELECT ENAME ,DESG,SALARY*0.05 AS "BONUS", SALARY+SALARY*0.05 AS "TOTAL SALARY" FROM
EMP;
ENAME DESG BONUS
Aman Clerk 750
Simran Manager 1250
karampree
Salesman 600
t
Manjot Salesman 500
gurpreet Clerk 850
gurnoor Clerk 400
hardeep Salesman 550
manjeet Admin 1350
Abhinav Manager 750
23
9: WRITE A QUERY TO DISPLAY THE NAME OF MANAGER OF
DEPARTMENT NO 20 WHOSE SLARY IS GREATER THAN
50,000?
SELECT ENAME,SALARY FROM EMP WHERE DEPTNO=20 AND DESG='MANAGER' AND
SALARY>50000;
ENAME SALARY
ABHINAV 55000
10: WRITE A QUERY TO DISPLAY THE DETAILS OF ALL
EMPLOYEES WHOSE DESIGNATION IS NOT YET ASSIGNED?
SELECT * FROM EMP WHERE DESG IS NULL;
ENO ENAME SALARY DEPT DESG COMM BASIC_PAY
11 ARSH 15000 10 NULL 500 1000
11: WRITE A QUERY TO DISPLAY THE LIST OF ALL EMPLOYEES
WHOSE NAME DOES NOT START WITH S?
SELECT * FROM EMP WHERE NAME NOT LIKE 'S%';
ENO ENAME SALARY DEPT DESG COMM BASIC_PAY
1 Aman 15000 10 Clerk 500 1000
3 karampreet 12000 30 salesman 200 500
4 Manjot 10000 30 salesman 200 500
5 Gurpreet 17000 40 Clerk 500 1000
6 Gurnoor 8000 10 Clerk 200 1000
24
8 Manjeet 27000 50 admin - 2000
9 Abhinav 15000 60 manager - 2000
12: WRITE A QUERY TO DISPLAY THE DETAIL OF EMPLOYEE IN
FORMAT AS "THE DEPARTMENT NUMBER OF " EMPLOYEE
NAME " IS " DEPTNO ?
SELECT 'THE DEPARTMENT NUMBER OF '||NAME||' IS '||DEPTNO FROM EMP;
THE DEPARTMENT NUMBER OF||NAME||IS||DEPTNO FROM EMP
THE DEPARTMENT NUMBER OF AMAN IS 10
THE DEPARTMENT NUMBER OF SIMRAN IS 20
THE DEPARTMENT NUMBER OF KAMALPREET IS 30
THE DEPARTMENT NUMBER OF MANJOT IS 30
THE DEPARTMENT NUMBER OF GURPREET IS 40
THE DEPARTMENT NUMBER OF GURNOOR IS 10
THE DEPARTMENT NUMBER OF MANJEET IS 50
THE DEPARTMENT NUMBER OF ABHINAV IS 60
13: WRITE A QUERY TO DISPLAY THE NAME AND ROLLNO OF
ALL STUDENT WHO HAS FAILED IN ANY SUBJECT?
SELECT RNO,NAME FROM STUDENT WHERE ENGLISH<40 OR C<40 OR CSM<40;
RNO NAME
1 ROHIT
4 RAJ
7 SANDEEP
25
14: WRITE A QUERY TO DISPLAY THE NAME AND ROLLNO OF
ALL STUDENT WHOSE MARKS ARE LESS THAN 40?
SELECT RNO,NAME FROM STUDENT WHERE ENGLISH+C+CSM<40
RNO NAME
4 RAJ
15: CREATE A TABLE STUDENT HAVING COLUMNS
STU_ID(NUMBER), SNAME(VARCHAR2),CLASS(VARCHAR2),
DOB(DATE),PHONE_NO(NUMBER), USE THE FOLLOWING
DDL STATEMENTS ON IT ?
A) SET THE STU_ID AS PRIMARY KEY?
B) INSERT 5 RECORDS INTO IT?
C) DELETE AND RECORD?
D) UPDATE THE PHONE_NO OF ANY STUDENT?
E) SET THE NOT NULL CONSTRAINT FOR DOB COLUMN?
A) CREATE TABLE STUDENT(STU_ID NUMBER(5)PRIMARY KEY,SNAME VARCHAR2(20),CLASS
VARCHAR2(5),DOB DATE,PHONE_NO NUMBER(10));
Table Column Data Type Length Precision Scale Primary Key
STUDE
NT STU_ID Number - 5 0 1
SNAME Varchar2 20 - - -
CLASS Varchar2 5 - - -
DOB Date - - - -
26
PHONE_NO Number - 10 0 -
B) INSERT INTO STUDENT(STU_ID,SNAME,CLASS,DOB,PHONE_NO)
VALUES(1,PRABSIMRAN,BCA, 15-AUG-94,2345678);
INSERT INTO STUDENT(STU_ID,SNAME,CLASS,DOB,PHONE_NO)
VALUES(2,SIMRAN,BBA, 16-SEP-
93,83698368);
INSERT INTO STUDENT(STU_ID,SNAME,CLASS,DOB,PHONE_NO)
VALUES(3,RIMALJEET,BA, 11-MAR-94,2918745);
INSERT INTO STUDENT(STU_ID,SNAME,CLASS,DOB,PHONE_NO)
VALUES(4,SANDEEP,BSC, 15-JAN-95,8598782338);
INSERT INTO STUDENT(STU_ID,SNAME,CLASS,DOB,PHONE_NO) VALUES(5,PRABLEEN,B.COM, 19-FEB-
93,2879636976);
STU_ID SNAME CLASS DOB PHONE_NO
1 PRABSIMRAN BCA 15-AUG-94 2345678
2 SIMRAN BBA 16-SEP-93 83698368
3 RIMALJEET BA 11-MAR-94 2918745
4 SANDEEP BSC 15-JAN-95 8598782338
5 PRABLEEN B.COM 19-FEB-93 2879636976
C) DELETE FROM STUDENT WHERE STU_ID=3;
SELECT * FROM STUDENT;
STU_ID SNAME CLASS DOB PHONE_NO
1 PRABSIMRAN BCA 15-AUG-94 2345678
2 SIMRAN BBA 16-SEP-93 83698368
4 SANDEEP BSC 15-JAN-95 8598782338
27
5 PRABLEEN B.COM 19-FEB-93 2879636976
D) UPDATE STUDENT SET PHONE_NO=4434366 WHERE STU_ID=2;
SELECT * FROM STUDENT;
STU_ID SNAME CLASS DOB PHONE_NO
1 PRABSIMRAN BCA 15-AUG-94 2345678
2 SIMRAN BBA 16-SEP-93 4434366
4 SANDEEP BSC 15-JAN-95 8598782338
5 PRABLEEN B.COM 19-FEB-93 2879636976
E) ALTER TABLE STUDENT MODIFY (DOB DATE NOT NULL)
DESC STUDENT;
Table Column Data Type Length Precision Primary Key Nullable
STUDENT STU_ID Number - 5 1 -
SNAME Varchar2 20 - -
CLASS Varchar2 5 - -
DOB Date - - - -
PHONE_NO Number - 10 -
28
16: CREATE A BIRTHDAY TABLE HAVING COLUMNS
NAME(VARCHAR2),DOB(DATE),ENAME (VARCHAR2),
PLACE(VARCHAR2),SEX(VARCHAR2)?
A) SET THE NAME,DOB AS PRIMARY KEY?
B) INSERT 5 RECORDS INTO IT?
C) DELETE ANY RECORD?
A) CREATE TABLE BIRTHDAY(NAME VARCHAR2(20),DOB DATE,ENAME VARCHAR2 (20),PLACE
VARCHAR2(10),SEX VARCHAR2(6),CONSTRAINT PK_BIRTHDAY(NAME,DOB));
Table Column Data Type Length Scale Primary Key Nullable
BIRTHDAY NAME VARCHAR2 20 - 1 -
DOB DATE - - 2 -
ENAME VARCHAR2 20 - -
PLACE VARCHAR2 10 - - -
SEX VARCHAR2 6 - -
B) INSERT INTO BIRTHDAY(NAME,DOB,ENAME,PLACE,SEX) VALUES('SIMRAN','11-
JAN- 1994','SIMRAN','LUDHIANA','FEMALE');
INSERT INTO BIRTHDAY(NAME,DOB,ENAME,PLACE,SEX)
VALUES('RIMAL','11-MAR- 1994','RIMAL','LUDHIANA','FEMALE');
INSERT INTO BIRTHDAY(NAME,DOB,ENAME,PLACE,SEX)
VALUES('SANDEEP','11-NOV- 1994','SANDEEP','LUDHIANA','FEMALE');
INSERT INTO BIRTHDAY(NAME,DOB,ENAME,PLACE,SEX)
VALUES('ADITYA','14-JAN- 1994','ADITYA','LUDHIANA','MALE');
INSERT INTO BIRTHDAY(NAME,DOB,ENAME,PLACE,SEX) VALUES('ABHISHEK','09-OCT-
1993','ABHISHEK','LUDHIANA','MALE');
NAME DOB ENAME PLACE SEX
29
SIMRAN 11-JAN-94 SIMRAN LUDHIANA FEMALE
RIMAL 11-MAR-94 SIMRAN LUDHIANA FEMALE
SANDEEP 11-NOV-94 SANDEEP LUDHIANA FEMALE
ADITYA 14-JAN-94 ADITYA LUDHIANA MALE
ABHISHEK 09-OCT-93 ABHISHEK LUDHIANA MALE
C) DELETE FROM BIRTHDAY WHERE NAME='ABHISHEK';
NAME DOB ENAME PLACE SEX
SIMRAN 11-JAN-94 SIMRAN LUDHIANA FEMALE
RIMAL 11-MAR-94 SIMRAN LUDHIANA FEMALE
SANDEEP 11-NOV-94 SANDEEP LUDHIANA FEMALE
ADITYA 14-JAN-94 ADITYA LUDHIANA MALE
17: WRITE A QUERY TO INSERT IMAGE STORED
AT'C:\MANGO.GIF' INTO A EMPLOYEE TABLE HAVING FIELDS
PHOTO(DATATYPE IS BFILE)?
INSERT INTO EMPLOYEE(PHOTO) VALUES(BFILENAME('C:\','MANGO.GIF'));
18:WRITE A QUERY TO INSERT CURRENT TIME INTO STUDENT
TABLE?
INSERT INTO STUDENT(DOT)
VALUES(TO_DATE(TO_CHAR(SYSDATE,'HH:MI:SS'),'HH:MI:SS'));
30
QUES 19: EXECUTE THE FOLLOWING QUERIES ON EMP TABLE
LIST THE ENAME OF EMPLOYEE WHOSE SALARY IS GREATER
THAN 2000 FROM EMP TABLE.
LIST THE ENAME,JOB,SAL OF AN EMPLOYEE WHOSE
DEPY_NO=10 AND SAL>2000 FROM EMP TABLE.
LIST ALL THE COLUMNS OF EMP TABLE WHOSE DEPARTMENT
NUMBER IS OTHER THAN 10.
LIST ALL THE EMPLOYEES OF EMP TABLE WHOSE NAME STARTS
WITH 'A' AND END WITH 'N'.
LIST ALL THE EMPLOYEE WHOSE JOB POST IS 'CLERK' OR
'MANAGER'.
LIST ALL THE EMPLOYEE WHOSE SALARY IS BETWEEN 1250
AND 3000.
LIST ALL THE EMPLOYEE WHO IS GETTING A COMMISSION.
LIST ALL THE EMPLOYEE'S ACCORDING TO THE DATE OF JOINING.
LIST THE LAST 3 CHARACTER OF ENAME OF EACH EMPLOYEE.
LIST ALL THE EMPLOYEE NAME'S AND EMPNO'S AS<EMPNO>NAME IS
<ENAME>.
LIST HIREDATE'S OF EACH EMPLOYEE IN THE FORMAT 'DD/MM/YYYY'.
LIST THE NUMBER OF MONTHS BETWEEN THE SYSTEM'S DATE AND THE
DATE OF JOINING OF THE EMPLOYEE.
LIST THE CURRENT SYSTEM DATE.
31
FIND THE DATE 7 DAYS AFTER THE TODAY'S DATE.
LIST THE MONTS OF JOINING OF EACH EMPLOYEE.
USING DECODE FUNCTION LIST JOB AS 'PRESIDENT' AS 'P' , 'MANAGER'
AS 'M'.
LIST ALL THE EMPLOYEE INFORMATION IN WHICH NULL VALUES IN
COMM COLUMN IS CHANGED INTO -99.
LIST THE MAXIMUM ,MINIMUM AND AVERAGE OF SALARY.
LIST THE SUM OF SALARY AND COMM OF EACH OF THE EMPLOYEE.
COUNT THE NUMBER OF JOB TITLE IN EMP TABLE.
CALCULATE THE NUMBER OF EMPLOYEE IN EACH DEPARTMENT EXCEPT
THE DEPTNO=30.
FIND ALL THE DEPARTMENT NUMBER WHERE NUMBER OF EMPLOYEE
EQUAL TO 4.
LIST ALL THE EMPLOYEE WHO JOINED IN 1981,DEPARTMENT WISE.
LIST ALL THE EMPLOYEE WHO JOINED IN 1987.
LIST ALL THE EMPLOYEE WHO ARE NOT CLERKS
LIST ALL THE EMPLOYEE WHO DO NOT HAVE A MANAGER.
LIST ALL THE EMPLOYEE WHO ARE NOT WORKING IN ANY DEPARTMENT.
LIST ALL THE EMPLOYEE WHO HAVE TWO L'S IN THEIR NAME.
LIST ALL THE EMPLOYEE INFORMATION SUCH THAT HIREDATE IS IN THE
FORMAT "FIFTH OF JUNE,2008".
32
LIST THE HIREDATE AND EMPLOYEE'S REVIEW DATE IF REVIEW DATE IS
FIRST MONDAY AFTER THREE MONTHS OF SERVICE.
LIST THE MGR AND THE SALARY OF THE LOWEST PAID EMPLOYEE FOR
THAT MANAGER.EXCLUDE ANYONE WHOSE MANAGER IS NOT
KNOWN.
A. SELECT ENAME FROM EMP WHERE SAL>20000;
ENAME SALARY
Simran 25000
Manjeet 27000
B. SELECT ENAME,SALARY,DESG FROM EMP WHERE DEPT_NO=10 AND
SAL>2000;
ENAME SALARY DESG
Aman 15000 Clerk
Gurnoor 8000 salesman
C. SELECT * FROM EMP WHERE DEPT_NO!=10;
ENO ENAME SALARY DEPT DESG COMM BASIC_PAY
2 simran 25000 20 Manager 1000 1500
3 karampreet 12000 30 salesman 200 500
4 manjot 10000 30 salesman 200 500
33
5 gurpreet 17000 40 Clerk 500 1000
7 hardeep 11000 30 salesman 200 500
8 manjeet 27000 50 Admin - 2000
9 abhinav 15000 60 Manager - 2000
D. SELECT ENAME FROM EMP WHERE ENAME LIKE 'A%' OR ENAME LIKE '%N';
ENAME
Aman
Simran
Abhinav
E. SELECT ENAME FROM EMP WHERE JOB='MANAGER' OR JOB='CLERK';
ENAME
Aman
Simran
Gurpreet
Gurnoor
Abhinav
F. SELECT ENAME FROM EMP WHERE SAL>1250 AND SAL<3000;
ENAME
Aman
34
Simran
Karampreet
Manjot
Gurpreet
Gurnoor
Hardeep
Manjeet
Abhinav
G. SELECT ENAME,COMM FROM EMP WHERE COMM IS NOT NULL;
ENAME COMM
Manjeet -
Abhinav -
H. SELECT ENAME FROM EMP ORDER BY HIREDATE;
ENAME
Aman
Simran
Karampreet
Manjot
35
Gurpreet
Gurnoor
Hardeep
Manjeet
Abhinav
I. SELECT ENAME,SUBSTR(ENAME,-1,3) FROM EMP;
ENAME SUBSTR(ENAME,-1,3)
Aman man
Simran ran
karampreet Eet
Manjot Jot
Gurpreet Eet
Gurnoor Oor
Hardeep Eep
Manjeet Eet
Abhinav Nav
J. SELECE EMPNO||' NAME IS '||ENAME FROM EMP;
EMPNO|| NAME IS ||ENAME
1 name is Aman
2 name is Simran
3 name is karampreet
4 name is Manjot
36
5 name is Gurpreet
6 name is Gurnoor
7 name is Hardeep
8 name is Manjeet
9 name is Abhinav
K. SELECT HIREDATE,TO_DATE('DD/MM/YYYY') FROM EMP;
HIREDATE TO_DATE(DD/MM/YYYY)
09-JUN-81 19/06/1981
17-NOV-87 17/11/1987
09-OCT-78 09/10/1978
11-JAN-76 11/01/1976
19-SEP-92 19/09/1992
03-OCT-84 03/10/1984
08-MAR-88 08/03/1988
24-MAY-82 24/05/1982
31-AUG-76 31/08/1976
L. SELECT ENAME,MONTHS_BETWEEN(SYSDATE,HIREDATE) FROM EMP;
ENAME MONTHS_BETWEEN(SYSDATE,HIREDATE)
Aman 289.78934
Simran 288.98456
karampreet 217.35465
Manjot 282.91353
37
Gurpreet 281.92783
Gurnoor 278.73236
Hardeep 281.73876
Manjeet 278.68245
Abhinav 288.77567
M. SELECT TO_CHAR(SYSDATE,'HH:MI:SS') FROM DUAL;
TO_CHAR(SYSDATE,HH:MI:SS)
06:05:09
N. SELECT SYSDATE+7 FROM DUAL;
SYSDATE+7
7-FEB-14
O. SELECT ENAME,HIREDATE FROM EMP;
ENAME HIREDATE
Aman 09-JUN-81
Simran 17-NOV-87
karampreet 09-OCT-78
Manjot 11-JAN-76
Gurpreet 19-SEP-92
38
Gurnoor 03-OCT-84
Hardeep 08-MAR-88
Manjeet 24-MAY-82
Abhinav 31-AUG-76
P. SELECTENAME,DESG,DECODE(DESG,'CLERK','C','MANAGER','M',SALESMAN,
S,OTHERS) FROM EMP;
ENAME DESG DECODE(DESG,CLERK,C ,MANGER,M,SALESMAN,S)
Aman clerk C
Simran manager M
karampree
salesman S
t
Manjot salesman S
Gurpreet clerk C
Gurnoor clerk C
Hardeep salesman S
Manjeet admin OTHERS
Abhinav manager M
Q. SELECT ENAME,COMM,NVL2(COMM,-99) FROM EMP;
ENAME COMM NVL(COMM,-99)
Aman 500 500
Simran 1000 1000
karampreet 200 200
Manjot 200 200
Gurpreet 500 500
39
Gurnoor 200 200
Hardeep 200 200
Manjeet - -99
Abhinav - -99
R. SELECT MAX(SAL),MIN(SAL),AVG(SAL) FROM EMP;
MAX(SAL) MIN(SAL) AVG(SAL)
27000 8000 15555.55556
S. SELECT SUM(SAL),SUM(COMM) FROM EMP;
SUM(SAL) SUM(COMM)
140000 2800
T. SELECT DESG,COUNT(DESG) FROM EMP GROUP BY DESG;
DESG COUNT(DESG)
CLERK 3
MANAGER 2
SALESMAN 3
ADMIN 1
U. SELECT COUNT(ENO) FROM EMP GROUP BY DEPT_NO;
40
COUNT(ENO)
2
1
4
1
1
V. SELECT DNO,ENAME FROM EMP HAVING COUNT(ENO)=4;
DNO ENAME
30 MANJOT
30 KAMALPREET
30 GURNOOR
30 ABHINAV
W. SELECT ENAME FROM EMP WHERE HIREDATE LIKE '%81' GROUP BY DEPTNO;
ENAME
Aman
Kamalpreet
X. SELECT ENAME FROM EMP WHERE HIREDATE LIKE '%87';
ENAME
Simran
41
Gurnoor
Y. SELECT ENAME FROM EMP WHERE JOB!=CLERK;
ENAME
Aman
Gurpreet
Gurnoor
Z. SELECT ENAME FROM EMP WHERE MGR IS NULL;
ENAME
Aman
Gurpreet
Manjeet
AA. SELECT ENO,ENAME FROM EMP WHERE DEPTNO IS NULL;
ENAME
Hardeep
BB. SELECT ENO,ENAME FROM EMP WHERE ENAME LIKE '%L%L';
NO DATA FOUND
42
CC. SELECT ENAME,TO_DATE('HIREDATE','Ddspth "OF" MONTH YYYY') FROM EMP;
ENAME TO_DATE(HIREDATE,Ddspth OF MONTH YYYY
Aman NINTH OF JUNE 1981
Simran SEVENTEENTH OF SEPPTEMPER 1987
Karampreet NINTH OF OCTOBER 1978
Manjot ELEVENTH OF JANYARY 1976
Gurpreet NINTEENTH OF SEPTEMBER 1992
Gurnoor THIRD OF OCTOBER 1984
Hardeep EIGHTH OF MARCH 1988
Manjeet TWENTYFORTH OF MAY 1982
Abhinav THIRTYTH OF AUGUST 1976
DD. SELECT ENAME,HIREDATE
TO_CHAR(NEXT_DAY(ADD_MONTHS(HIREDATE,3),'MONDAY'),), 'MON-DAY-YYYY') AS
EXPRESSION FROM EMP;
ENAME EXPRESSION
Aman 09-JUN-81
Karampreet 09-OCT-78
Manjeet 24-MAY-82
EE. SELECT MGR,MIN(SAL) FROM EMP GROUP BY(MGR);
MGR MIN(SAL)
20 8000
43
30 12000
44
20:CONSIDER A SUPPLIER_PARTS DATABASE.CREATE THREE
TABLES HAVING COLUMNS AS GIVEN:
SUPP TABLE(SID,SNAME,LOCATION) WHERE SID IS THE
PRIMARY KEY.
PARTS TABLE(PID,PNAME,COLOR,WEIGHT,CITY)WHERE PID IS
THE PRIMARY KEY.
SUP_PARTS TABLE(SID,PID,QUANTITY) WHERE(SID,PID) IS THE
PRIMARY KEY AND SID AND PID ARE FOREIGN KEYS TO
SUPP AND PARTS TABLE RESPECTIVELY.
NOW INSERT 5 RECORDS IN EACH TABLE AND RUN THE
FOLLOWING QUERIES.
LIST ALL THE PARTS INFORMATION?
GET THE TOTAL QUANTITY OF PART P1 SUPPLIED BY SUPPLIER
S1?
LIST ARE PARTS INFORMATION WHOSE COLOR IS 'RED'?
LIST ALL SUPPLIERS WHOSE NAME START WITH S AND WHOSE
LOCATION ENDS WITH R?
GET THE TOTAL QUENTITY SUPPLIED BY EACH SUPPLIER?
GET THE TOTAL QUANTITY WHOSE SUPPLIER IS S2 AND PART
IS P2?
CREATE TABLE SUPP (SID NUMBER(2)PRIMARY KEY,SNAME VARCHAR2(10),LOCATION
VARCHAR2(10));
45
Table Column Data Type Length Precision Primary Key Nullable
SUPP SID Number - 2 1 -
SNAME Varchar2 10 - -
LOCATION Varchar2 10 - -
CREATE TABLE PARTS(PID NUMBER(2)PRIMARY KEY,PNAME VARCHAR2(10),COLOR
VARCHAR2(10),WEIGHT NUMBER(3),CITY VARCHAR2(3));
Table Column Data Type Length Precision Primary Key Nullable
PARTS PID Number - 2 1 -
PNAME Varchar2 10 - -
COLOR Varchar2 10 - -
WEIGHT Number - 3 -
CITY Varchar2 3 - -
CREATE TABLE SUP_PARTS(SID NUMBER(2),PID NUMBER(2)PRIMARY KEY,QUANTITY
NUMBER(2),CONSTRAINT FK FOREIGN KEY(PID,SID)REFERENCES PARTS(PID),SUPP(SID));
Table Column Data Type Length Precision Primary Key Nullable
SUP_PARTS SID Number - 2 1 -
PID Number - 2 1 -
QUANTITY Number - 2 -
INSERT INTO SUPP(SID,SNAME,LOCATION)VALUES(10,PEN,LUDHIANA);
INSERT INTO SUPP(SID,SNAME,LOCATION)VALUES(20,PAPER,JALANDHAR);
INSERT INTO SUPP(SID,SNAME,LOCATION)VALUES(30,PENCIL,PATIALA);
INSERT INTO SUPP(SID,SNAME,LOCATION)VALUES(40,BOOK,AMBALA);
INSERT INTO SUPP(SID,SNAME,LOCATION)VALUES(50,REGISTER,AMRITSAR);
SID SNAME LOCATION
46
10 PEN LUDHIANA
20 PAPER JALANDHAR
30 PENCIL PATIALA
40 BOOK AMBALA
50 REGISTER AMRITSAR
INSERT INTO
PARTS(PID,PNAME,COLOR,WEIGHT,CITY)VALUES(11,SIMRAN,RED,20,LUDHIANA)
;
INSERT INTO
PARTS(PID,PNAME,COLOR,WEIGHT,CITY)VALUES(12,AASHISH,BLUE,22,AMRITSAR
);
INSERT INTO
PARTS(PID,PNAME,COLOR,WEIGHT,CITY)VALUES(13,RIMALJEET,GREEN,16,
JALANDHAR);
INSERT INTO PARTS(PID,PNAME,COLOR,WEIGHT,CITY)VALUES(14,ABHI,PINK,15,CHANDIGARH);INSERT
INTO PARTS(PID,PNAME,COLOR,WEIGHT,CITY)VALUES(15,SANDEEP,BLACK,11,AMBALA);
PID PNAME COLOR WEIGHT CITY
11 SIMRAN RED 20 LUDHIANA
12 AASHISH BLUE 22 AMRITSAR
13 RIMALJEET GREEN 16 JALANDHAR
14 ABHI PINK 15 CHANDIGARH
15 SANDEEP BLACK 11 AMBALA
INSERT INTO SUP_PARTS(SID,PID,QUANTITY)VALUES(10,11,40);
INSERT INTO SUP_PARTS(SID,PID,QUANTITY)VALUES(20,12,30);
INSERT INTO SUP_PARTS(SID,PID,QUANTITY)VALUES(30,13,20);
INSERT INTO SUP_PARTS(SID,PID,QUANTITY)VALUES(40,14,10);
47
INSERT INTO SUP_PARTS(SID,PID,QUANTITY)VALUES(50,15,50);
SID PID QUANTITY
10 11 40
20 12 30
30 13 20
40 14 10
50 15 50
SELECT * FROM PARTS;
PID PNAME COLOR WEIGHT CITY
11 SIMRAN RED 20 LUDHIANA
12 AASHISH BLUE 22 AMRITSAR
13 RIMALJEET GREEN 16 JALANDHAR
14 ABHI PINK 15 CHANDIGARH
15 SANDEEP BLACK 11 AMBALA
SELECT QUANTITY FROM SUPP_PARTS WHERE SID=10 AND PID 11;
QUANTITY
40
SELECT * FROM PARTS WHERE COLOR=RED;
PID PNAME COLOR WEIGHT CITY
11 SIMRAN RED 20 LUDHIANA
SELECT SNAME FROM SUPP WHERE SNAME LIKEA% AND LOCATION LIKE %R;
PID PNAME COLOR WEIGHT CITY
12 AASHISH BLUE 22 AMRITSAR
SELECT QUANTITY FROM SUP_PARTS;
QUANTITY
40
48
30
20
10
50
SELECT SUM(QUANTITY) FROM SUP_PARTS WHERE SID=20 AND PID=12;
SUM(QUANTITY)
30
21.:CREATE TABLE BCA AND PERFORM FOLLOWING QUERIES
CREATE TABLE BCA(RNO NUMBER(3),NAME VARCHAR2(10),CLASS
VARCHAR2(6),STATUS VARCHAR2(6));
DESC BCA;
Table Column Data Type Length Precision Primary Key Nullable
BCA RNO Number - 3 -
NAME Varchar2 10 - -
CLASS Varchar2 6 - -
STATUS Varchar2 6 - -
1.insert records into it
insert into BCA values(10,'a','bca1','pass');
insert into BCA values(20,'b','bca2','pass');
insert into BCA values(30,'c','bca2','fail');
49
insert into BCA values(40,'d','bca3','pass');
insert into BCA values(50,'e','bca3','fail');
select * from BCA123;
2.count number of students in each class
select class,count(class) from BCA123 group by class;
3.count number of students who has failed in each class
select count(rollno) from BCA123 where status='fail';
50
GROUP and HAVING CLAUSE
1. count number of clerks in emp table
Select job,count(desi) from emp where desi= clerk GROUP BY JOB;
2.count number of clerks in each dept
Select deptno,count(job) from emp where desi= clerk GROUP BY DEPT;
3.count the number of employees in table job wise
Select job,count(job) from emp GROUP BY JOB;
4.To find total salary paid to each job title within each dept
Select deptno,SUM(sal) from emp GROUP BY deptno;
5.to count the number of employees under each job title with
each dept
Select deptno,COUNT(eno) from emp GROUP BY deptno;
51
JOIN
1. SELECT ENAME,DESG,DNAME OF EACH EMPLOYEE USING EQUI JOIN.
SELECT ENAME,DESG,DNAME FROM EMP,DEPT WHERE EMP.ENO=DEPT.DNO;
ENAME DESG DNAME
AMAN CLERK SCIENCE
SIMRAN MANAGER COMPUTER
KARAMPREET SALESMAN COMMERCE
MANJOT SALESMAN ENGLISH
GURPREET CLERK PUNJABI
2. SELECT ENAME,DEPT AND DNAME WHERE DESG IS CLERK.
SELECT ENAME,EMP.DEPT,DNAME FROM EMP,DEPT
WHERE EMP.DEPT=DEPT.DPTNO AND DESG='CLERK';
ENAME DEPT DNAME
GURNOOR 10 SCIENCE
AMAN 10 SCIENCE
GURPREET 40 ENGLISH
52
3. SELECT ENAME, DEPT, DNAME FROM EMP AND DEPT TABLE
USING CARTESIAN JOIN.
SELECT ENAME, EMP.DEPT, DNAME FROM EMP,DEPT ORDER BY ENAME;
ENAME DEPT DNAME
ABHINAV 60 SCIENCE
ABHINAV 60 COMMERCE
ABHINAV 60 PUNJABI
ABHINAV 60 ENGLISG
ABHINAV 60 COMPUTER
AMAN 10 SCIENCE
AMAN 10 COMMERCE
AMAN 10 COMPUTER
AMAN 10 ENGLISG
AMAN 10 PUNJABI
4. SELECT ENAME,DESG,DPTNO AND DNAME WHOSE DPTNO IS
NOT 20 AND 40.
SELECT ENAME,DESG,DEPT.DPTNO,DNAME FROM EMP,DEPT
WHERE EMP.DEPT(+)=DEPT.DPTNO AND DEPT.DPTNO NOT IN(20,40);
ENAME DESG DPTNO DNAME
AMAN CLERK 10 SCIENCE
KARAMPREET SALESMAN 30 COMMERCE
MANJOT SALESMAN 30 COMMERCE
GURNOOR CLERK 10 SCIENCE
HARDEEP SALESMAN 30 COMMERCE
MANJEET ADMIN 50 PUNJABI
53
SELF-JOIN
5. RETRIEVE THE LOCATION OF EACH DEPARTMENT.
SELECT E1.DNAME||' DEPARTMENT IN '|| E2.LOC FROM DEPT E1,DEPT E2
WHERE E1.DNO=E2.DNO;
E1.DNAME||'DEPARTMENTIN'||E2.LOC
SCIENCE DEPARTMENT IN MODEL TOWN
COMPUTER DEPARTMENT IN DHOLEWAL
COMMERCE DEPARTMENT IN MILAR GANJ
ENGLISG DEPARTMENT IN ARTI CHOWK
PUNJABI DEPARTMENT IN PREET PLC
54
SET OPERATOR
6. SELECT ENO,ENAME FROM EMP TABLE WHERE EITHER DEPT=10 OR
DEPT=30.
SELECT ENO,ENAME FROM EMP WHERE DEPT=10
UNION
SELECT ENO,ENAME FROM EMP WHERE DEPT=30;
ENO ENAME
1 AMAN
3 KARAMPREET
4 MANJOT
6 GURNOOR
7 HARDEEP
7. SHOW ENO AND NAME OF EMPLOYEES WHO WORK FOR
DEPTNO 10 AND DEPTNO 40.
SELECT ENO,ENAME FROM EMP WHERE DEPT=1
MINUS
SELECT ENO,ENAME FROM EMP WHERE DEPT=40;
ENO ENAME
1 AMAN
6 GURNOOR
55
8. SHOW THE NAMES OF EMPLOYEES WHOSE NAME START
WITH A, J OR S USING INTERSECT OPERATOR.
SELECT ENO,ENAME FROM EMP
WHERE ENAME LIKE 'A%' OR ENAME LIKE 'S%'
INTERSECT
SELECT ENO,ENAME FROM EMP
WHERE ENAME LIKE 'A%' OR ENAME LIKE 'J%';
ENO ENAME
1 AMAN
9 ABHINAV
56
SUB QUERIES
9. LIST DEPARTMENT INFORMATION OF ALL DEPARTMENT WHOSE
LOCATION IS LDH.
SELECT DNAME,DNO,DPTNO FROM DEPT WHERE DNO IN (SELECT
DNO FROM DEPT WHERE ADDRESS ='LDH');
DNAME DNO DPTNO
SCIENCE 1 10
ENGLISG 4 40
10. LIST ALL EMPLOYEES WHO EARN MORE THAN THE
AVERAGE SALARY OF ALL EMPLYEES.
SELECT ENAME,DEPT,SALARY FROM EMP WHERE SALARY >(SELECT AVG(SALARY) FROM EMP E2 WHERE
EMP.DEPT=EMP.DEPT);
ENAME DEPT SALARY
SIMRAN 20 25000
GURPREET 40 17000
MANJEET 50 27000
57
11. LIST ALL EMPLOYEES WHICH IS SAME AS THOSE OF
EMPLOYEES WHOSE NAME END WITH N.
SELECT ENO,ENAME FROM EMP WHERE ENAME LIKE '%N';
ENO ENAME
1 AMAN
2 SIMRAN
12. LIST NUMBER OF EMPLOYEES OF IN SCIENCE DEPARTMENT
TABLE.
SELECT ENAME,SALARY FROM EMP ,DEPT WHERE DNAME='SCIENCE' AND EMP.DEPT=DEPT.DPTNO;
ENAME SALARY
AMAN 15000
GURNOOR 8000
13. LIST NAMES OF EMPLOYEES WHERE SAL>MAXIMUM SAL OF
DEPTNO=20;
SELECT ENAME,SALARY FROM EMP WHERE SALARY>(SELECT MAX(SALARY) FROM EMP WHERE
DEPT=20);
ENAME SALARY
MANJEET 27000
58
14. LIST ENO,ENAME,SALARY(INCL. COMM) AND DNAME OF ALL
EMPLOYEES.
SELECT ENO,ENAME,SALARY,SALARY+COMM,DNAME FROM EMP,DEPT WHERE EMP.DEPT=DEPT.DPTNO;
ENO ENAME SALARY SALARY+COMM DNAME
1 AMAN 15000 15500 SCIENCE
2 SIMRAN 25000 26000 COMPUTER
3 KARAMPREET 12000 12200 COMMERCE
4 MANJOT 10000 10200 COMMERCE
5 GURPREET 17000 17500 ENGLISG
6 GURNOOR 8000 8200 SCIENCE
7 HARDEEP 11000 11200 COMMERCE
8 MANJEET 27000 - PUNJABI
15.DISPLAY NAMES OF EMPLOYEES WHOSE SALARY IS GREATER
THAN MAXIMUM SALARY OF EMPLOYEES WORKING IN
DEPT=20;
SELECT ENAME FROM EMP WHERE SALARY>(SELECT MAX(SALARY) FROM EMP WHERE DEPT=20);
ENAME
MANJEET
16. DISPLAY ALL EMPLOYEES WHO ARE WORKING IN DEPT=10
AND WHO EARN ATLEAST MUST AS ANY EMPLOYEE IN
DEPT=30.
SELECT ENAME,SALARY,DESG FROM EMP WHERE SALARY>= ANY(SELECT SALARY FROM EMP WHERE
DEPT=30) AND DEPT=10;
59
ENAME SALARY DESG
AMAN 15000 CLERK
17.DISPLAY ALL EMPLOYEES WHO ARE NOT IN DEPT=30 AND
WHO EARN MORE THAN ALL EMPLOYEES IN DEPT=30.
SELECT ENAME,SALARY,DESG FROM EMP WHERE SALARY>= ALL(SELECT SALARY FROM EMP WHERE
DEPT=30) AND DEPT!=30;
ENAME SALARY DESG
AMAN 15000 CLERK
SIMRAN 25000 MANAGER
GURPREET 17000 CLERK
MANJEET 27000 ADMIN
ABHINAV 15000 MANAGER
VIEW AND SEQUENCE
1. CREATE VIEW AND PERFORM INSERTION
CREATE VIEW CLERK AS
SELECT ENO,ENAME,DESG,DEPT FROM EMP;
INSERT INTO CLERK(ENO,ENAME,DESG,DEPT)VALUES
(10,'SANDY','CLERK',60);
60
2. CREATE A VIEW BY ENABLING READ ONLY OPTION
CREATE OR REPLACE VIEW CLERK AS
SELECT ENO,ENAME,DESG,DEPT FROM EMP WHERE DEPT=20 AND DEPT=40 WITH
READ ONLY;
3. CREATE A JOIN VIEW
CREATE OR REPLACE VIEW EMP_DEPT_VEIW AS SELECT
EMP.ENO,EMP.ENAME,EMP.DEPT,DEPT.DNAME ,DEPT.LOC FROM EMP,DEPT
WHERE DEPT.LOC IN('LDH','JLD','CHD');
4. CREATE SEQUENCE
CREATE SEQUENCE EMP_DEPT
INCREMENT BY 1
START WITH 1
MAXVALUE 50;
5. INSERTION IN SEQUENCES
INSERT INTO EMP_DEPT (ENO,ENAME,SALARY) VALUES (EMP_DEPT.NEXTVAL,
PREET,21000);
6. ALTER SEQUENCE
ALTER SEQUENCE EMP_DEPT
INCREMENT BY 2
MAXVALUE 100;
61
7.DROP SEQUENCE
DROP SEQUENCE EMP_DEPT;
PL/SQL
1: WRITE A PROGRAM TO DISPLAY A MESSAGE 'WELCOME TO PL/SQL'.
SOLUTION:
begin
dbms_output.put_line('WELCOME TO PL/SQL');
end;
--OUTPUT--
WELCOME TO PL/SQL
Statement processed.
62
0.00 seconds
2. WRITE A PL/SQL PROGRAM TO FIND NUMBER IS POSITIVE
OR NEGATIVE USING IF STATEMENT.
SOLUTION:
SQL> declare
num number;
begin
num := :num;
if num > 0 then
dbms_output.put_line('number '||num||' is positive');
else
dbms_output.put_line(number ||num|| is negative);
end if;
end;
--OUTPUT--
num := 4
number 4 is positive
63
Statement processed.
0.00 seconds
3. WRITE A PL/SQL PROGRAM TO FIND NUMBER IS EVEN OR
ODD OR ZERO USING IF-ELSE STATEMENT.
SOLUTION:
SQL>declare
num number;
begin
num := :num;
if num mod 2 = 0 then
dbms_output.put_line('number'||num||' is even');
elsif
dbms_output.put_line('number'||num||' is odd');
else
dbms_output.put_line(number is zero);
end if;
end;
--OUTPUT--
num := 63
number63 is odd
64
Statement processed.
0.00 seconds
4.WRITE A PL/SQL PROGRAM TO PRINT DAYS OF WEEKS
ACCORDING TO NUMBERS.
SOLUTION:
declare
n number := :n;
begin
if n=1 then
dbms_output.put_line('Day is sunday');
elsif n=2 then
dbms_output.put_line('Day is monday');
elsif n=3 then
dbms_output.put_line('Day is tuesday');
elsif n=4 then
dbms_output.put_line('Day is wednesday');
elsif n=5 then
dbms_output.put_line('Day is thursday');
elsif n=6 then
dbms_output.put_line('Day is friday');
elsif n=7 then
65
dbms_output.put_line('Day is saturday');
else
dbms_output.put_line('invalid input');
end if;
end;
--OUTPUT--
n := 6
Day is friday
Statement processed.
0.00 seconds
66
5: WRITE A PL/SQL PROGRAM TO PRINT MONTH OF YEAR
ACCORDING TO NUMBERS.
SOLUTION:
declare
n number;
begin
n := :n;
if n=1 then
dbms_output.put_line('month is january');
elsif n =2 then
dbms_output.put_line('month is feburary');
elsif n = 3 then
dbms_output.put_line('month is march');
elsif n =4 then
dbms_output.put_line('month is april');
elsif n = 5 then
dbms_output.put_line('month is may');
elsif n =6 then
dbms_output.put_line('month is june');
elsif n = 7 then
67
dbms_output.put_line('month is july');
elsif n =8 then
dbms_output.put_line('month is august');
elsif n = 9 then
dbms_output.put_line('month is september');
elsif n =10 then
dbms_output.put_line('month is october');
elsif n = 11 then
dbms_output.put_line('month is november');
elsif n =12 then
dbms_output.put_line('month is december');
else
dbms_output.put_line('invalid input');
end if;
end;
--OUTPUT--
n := 6
month is june
Statement processed.
0.02 seconds
68
6:WRITE A PL/SQL PROGRAM TO EVALUATE DIFFERENT
ARITHMETIC EXPRESSIONS.
SOLUTION:
DECLARE
a number := :a;
b number := :b;
c number;
n number:= :n;
BEGIN
IF (n=1) THEN
c:= a+b;
dbms_output.put_line('after addition c= ' || c);
elsif (n=2) THEN
c:= a-b;
dbms_output.put_line('after subtraction c= ' || c);
elsif (n=3) THEN
c:= a*b;
dbms_output.put_line('after mul c= ' || c);
ELSIF (n=4) THEN
c:= a/b;
dbms_output.put_line('after division c= ' || c);
ELSE
dbms_output.put_line(' enter from 1 to 4 ');
END IF;
END;
--OUTPUT
A: 8
B: 4
N: 4
69
after division c= 2
7: WRITE A PROGRAM TO CALCULATE AREA OF DIFFERENT
GEOMETRICAL SHAPES.
SOLUTION:
declare
r number;
l number;
b number;
area number;
pi constant number(9,7) := 3.1415926;
n number:=:n;
begin
if(n=1) then
r := :r;
area := pi * r * r;
dbms_output.put_line('Area of circle is ' ||area);
elsif(n=2) then
r := :r;
area := r * r * r;
dbms_output.put_line('Area of cube is ' ||area);
elsif(n=3) then
70
l:= :l;
b:= :b;
area:= l * b;
dbms_output.put_line('area of rectangle is ' || area);
elsif(n=4) then
r:= :r;
area:= r ** 2;
Dbms_output.put_line('area of square ' || area);
elsif(n=5) then
l:= :l;
b:= :b;
area:= 0.5 * l * b;
dbms_output.put_line('area of triangle is ' || area);
else
dbms_output.put_line('Enter between 1-5);
end if;
end;
--OUTPUT--
r := 5
Area of circle is 78.539815
Statement processed.
71
0.00 seconds
8:WRITE PL/SQL PROGRAM TO FIND GREATEST AMONG THREE
NUMBERS
SOLUTION:
DECLARE
a number;
b number;
c number;
BEGIN
a:= :a;
b:= :b;
c:= :c;
IF (a>b AND a>c) THEN
dbms_output.put_line('a is the greatest');
ELSIF (b>a and b>c) THEN
dbms_output.put_line('b is the greatest');
ELSIF (c>a and c>b) THEN
dbms_output.put_line('c is the greatest');
ELSE
dbms_output.put_line('sorry');
END IF;
END;
--OUTPUT--
Enter the value of a: 2
Enter the value of b: 5
Enter the value of c: 1
b is the greatest
Statement processed.
72
9:WRITE A PL/SQL PROGRAM TO CALCULATE SIMPLE
INTEREST.
SOLUTION:
declare
p number:= :p;
r number:= :r;
t number:= :t;
s number:= 0;
begin
s:= p * r * t / 100;
dbms_output.put_line('simple interest is ' || s);
end;
--OUTPUT--
p :=3000
r := 2
t := 10
simple interest is 600
Statement processed.
0.02 seconds
73
10: WRITE A PL/SQL PROGRAM TO PRINT COUNTING FROM 1
TO 10 USING WHILE LOOP
SOLUTION:
declare
n number := :n;
begin
while n <= 10loop
dbms_output.put_line(n);
n := n+1;
end loop;
end;
--OUTPUT--
n :=1
1
2
3
4
5
6
7
8
9
10
Statement processed.
0.01 seconds
74
11: WRITE A PL/SQL PROGRAM TO PRINT COUNTING FROM 1
TO 10 USING FOR LOOP
SOLUTION:
declare
n number := :n;
begin
for i in 1..n loop
dbms_output.put_line(i);
end loop;
end;
--OUTPUT--
N := 10
1
2
3
4
5
6
7
8
9
10
Statement processed.
0.00 seconds
75
12:Write PL/SQL program to print 1 to 10 numbers in reverse
order using for loop
SOLUTION:
DECLARE
n number;
BEGIN
n:= :n;
FOR I IN REVERSE 1 ..n LOOP
Dbms_output.put_line(i);
END LOOP;
Dbms_output.new_line;
END;
--OUTPUT--
Enter value for n: 10
10
9
8
7
6
5
4
3
2
1
76
13: WRITE A PL/SQL PROGRAM TO FIND FACTORIAL OF A
NUMBER.
SOLUTION:
DECLARE
n number:= :n;
f number := 1;
BEGIN
while n>1 LOOP
f:= f*n;
n:= n-1;
END LOOP;
dbms_output.put_line('factorial is ' || f );
END;
--OUTPUT--
n =5
factorial is 120
Statement processed.
0.00 seconds
77
14: WRITE A PL/SQL TO PRINT THE TABLE OF A NUMBER USING
FOR LOOP
SOLUTION:
DECLARE
n number:= :n;
t number;
BEGIN
FOR i IN 1..10 LOOP
t:= n * i;
Dbms_output.put_line(n || ' * ' || i ||' = '|| t);
END LOOP;
END;
--OUTPUT--
n := 9
9*1=9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81
9 * 10 = 90
Statement processed.
0.00 seconds
78
15:WRITE A PL/SQL PROGRAM TO FIND THE SUM OF 10 EVEN
NUMBERS.
SOLUTION:
declare
s number:= 0;
n number := :n;
begin
for i in 1..n loop
if n mod 2 = 0 then
s := s + n;
end if;
end loop;
dbms_output.put_line(s);
end
--OUTPUT--
N := 20
400
Statement processed.
0.00 seconds
79
16: WRITE A PL/SQL PROGRAM TO PRINT THE ENAME OF
EMPLOYEE FROM EMP TABLE IF THE SAL OF GIVEN EMPNO IS
GREATER THAN 3000.
SOLUTION:
declare
no emp.empno %type;
ame emp.ename %type;
begin
no := :eno;
Select ename into name from emp where sal > 3000 and empno = eno;
bms_output.put_line('name is '|| name);
end;
--OUTPUT--
Eno := 7902
name is miller
Statement processed.
0.00 seconds
80
17: WRITE A PL/SQL PROGRAM TO DISPLAY SALARY OF AN
EMPLOYEE WITH SPECIFIC EMPNUMBER FROM EMPLOYEE
TABLE.
SOLUTION:
DECLARE
salary emp.sal%TYPE;
eno emp.empno%TYPE;
BEGIN
Eno:= :empno;
Select sal into salary from emp where empno=eno;
Dbms_output.put_line('salary of ' || eno || ' is= ' || salary);
END;
--OUTPUT--
Empno:=7902
salary of 7902 is= 5640
Statement processed.
0.00 seconds
81
18: WRITE A PL/SQL PROGRAM TO PRINT THE INFORMATION
OF A PARTICULAR EMPLOYEE FROM EMP TABLE USING
%ROWTYPE.
SOLUTION:
DECLARE
Employee emp%ROWTYPE;
BEGIN
Select * into employee from emp where empno=7902;
Dbms_output.put_line('Name of an employee is '||employee.ename);
Dbms_output.put_line('Salary of anemployee is '|| employee.sal);
Dbms_output.put_line('Designation of an employee is '||employee.job);
Dbms_output.put_line('Department number of an employee is '||
employee.dno);
END;
--OUTPUT--
Name of an employee is miller
Salary of anemployee is 5640
Designation of an employee is clerk
Department number of an employee is 20
Statement processed.
0.00 seconds
82
19: WRITE A PL/SQL PROGRAM TO INSERT A NEW RECORD IN
EMPLOYEE TABLE.
SOLUTION:
BEGIN
Insert into emp(empno,ename,sal,job,dno)
Values
(8101,'sandeep',78950,'manager',30);
Dbms_output.put_line('Data entered');
END;
--OUTPUT
Data entered
1 row(s) inserted.
0.00 seconds
83
20: WRITE A PL/SQL PROGRAM TO INSERT THREE RECORDS
INTO STUDENT TABLE USING WHILE LOOP
SOLUTION:
DECLARE
rollno number := 5;
english number := 42;
n number := 1;
BEGIN
WHILE n<=3 LOOP
Insert into student(rno,eng) values(rollno,english);
rollno := rollno+1;
english := english + 10;
n:= n+1;
END LOOP;
END;
--OUTPUT--
84
statement processed
select * from student;
RNO NAME ENG MATH PBI
1 meenakshi 75 46 68
2 sandeep 92 67 87
3 sarbhjeet 45 36 60
4 ekjot 72 54 69
5 geetika 52 48 75
5 - 42 - -
6 - 52 - -
7 - 62 - -
21:WRITE PL/SQL PROGRAM TO PERFOEM VARIOUS DML
OPERATIONS ON EMP TABLE
SOLUTION:
85
DECLARE
ecode employee.eno%type;
choice number;
BEGIN
dbms_output.put_line('case1 : to selection');
dbms_output.put_line('case1 : to insertion');
dbms_output.put_line('case1 : to deletion');
dbms_output.put_line('case1 : to updation');
choice:= :choice;
ecode:= :ecode;
if (choice=1) THEN
select name,salary from employee where eno=ecode;
dbms_output.put_line('data selected');
elseif(choice=2) THEN
insert into emloyee(eno,name,salary,dept_no)
values(2,'ram',30000,20);
dbms_output.put_line('data inserted');
elseif(choice=3) THEN
delete from employee where eno=ecode;
dbms_output.put_line('data deleted');
elseif(choice=4) THEN
86
update employee set salary=salary+500 where eno=ecode;
dbms_output.put_line('data updated');
else
dbms_output.put_line('invalid choice');
END IF;
END;
22.WRITE A PL/SQL PROGRAM TO WHICH EXECUTES A LOOP 3
TIMES USING EXIT WHEN STATEMENT.
SOLUTION:
DECLARE
87
N number :=0;
BEGIN
LOOP
N := n+1;
EXIT WHEN n>3;
Dbms_output.put_line('loop executes' || n || 'times');
END LOOP;
END;
--OUTPUT--
Loop executes 1 times
Loop executes 2 times
Loop executes 3 times
23:WRITE A PL/SQL PROGRAM TO HANDLE TOO_MANY_ROWS
EXCEPTION.
SOLUTION:
DECLARE
Name emp.ename%type;
88
BEGIN
Select ename into name from emp where dept=10;
Dbms_output.put_line('employee name:= '|| name);
EXCEPTION
WHEN TOO_MANY_ROWS THEN
Dbms_output.put_line('more than one rows returned');
END;
--OUTPUT--
more than one rows returned
24:Write PL/SQL program which handles more than one
exception
SOLUTION:
DECLARE
Name emp.ename%type;
89
BEGIN
Select ename into name from emp where deptno=:deptno;
dbms_output.put_line(employee name:= || name);
EXCEPTION
WHEN TOO_MANY_ROWS THEN
Dbms_output.put_line(more than one rows returned);
WHEN ZERO_DIVIDE THEN
Dbms_output(divide by zero);
WHEN OTHERS THEN
Dbms_output.put_line(no rows exit);
END;
25:WRITE A PL/SQL PROGRAM TO CREATE USER-DEFINED
EXCEPTION WHICH CHECKS WHETHER THE NAME OF
EMPLOYEE IS BLANK DURING INSERTION
SOLUTION:
DECLARE
90
Ecode emp.empno%type;
Name emp.ename%type;
Ename_err exception;
BEGIN
Ecode := :ecode;
Name := :name;
If name is null then
Raise ename_err;
End if;
Insert into emp(empno,ename) values (ecode,name);
Dbms_output.put_line('data entered');
EXCEPTION
When ename_err then
Dbms_output.put_line('ename should not be blank');
END;
--OUTPUT--
data entered
1 row(s) inserted.
91
26:WRUTE A PL/SQL PROGRAM TO CREATE A USER DEFINED
EXCEPTION TO CHECK WEATHER AGE IS GREATER THAN 18
OR NOT.
SOLUTION
DECLARE
AGE NUMBER;
92
AGE_ERR EXCEPTION;
BEGIN
AGE:=:AGE;
IF(AGE<18) THEN
RAISE AGE_ERR;
ELSE
DBMS_OUTPUT.PUT_LINE(YOU CAN VOTE);
END IF;
EXCEPTION
WHEN AGE_ERR THEN
DBMS_OUTPUT.PUT_LINE(YOU CANNOT VOTE);
END;
27: WRITE A PL/SQL PROGRAM FOR DEMONSTRATING PRAGMA
EXCEPTION.
SOLUTION
DECLARE
NO_DATA EXCEPTION;
PRAGMA EXCEPTION_INIT(NO_DATA,-1403);
93
BEGIN
SELECT ENAME FROM EMP WHERE DEPTNO=30 AND DESG=MANAGER;
DBMS_OUTPUT.PUT_LINE(ENAME|| IS MANAGER OF DEPARTMENT 30);
EXCEPTION
WHEN NO_DATA THEN
DBMS_OUTPUT.PUT_LINE(NO MANGER IN DEPARTMENT 30);
END;
--OUTPUT
ARJIT IS MANAGER OF DEPARTMENT 30
28: WRITE A PL/SQL PROGRAM TIF THE SALSRY ENTERED
DOES NOT RETURN ANY ROW HANDEL IT USING
RAISE_APPLICATION_ERROR AND DISPLAY MESSAGE NO
EMPLOYEE WITH THIS SALARY;
SOLUTION:
DECLARE
SALARY NUMBER;
94
BEGIN
SELECT ENAME FROM EMP WHERE SALARY:=:SALARY;
IF(ENAME IS NULL) THEN
RAISE_APPLICATION_ERROR(-23456, NO EMPLOYEE WITH THIS
SALARY);
ELSE
DBMS_OUTPUT.PUT_LINE(ENAME|| WITHDRAW ||SALARY);
END IF;
END;
29:WRITE A PL/SQL PROGRAM TO UPDATE THE SALARY OF A
GIVEN EMPLOYEE.USE SQL%NOTFOUND ATTRIBUTE TO
CHECK WHETHER THE RECORD IS UPDATED OR NOT?
SOLUTION:
Begin
update emp Set salary= salary+100 where eno= :eno;
IF SQL%NOTFOUND then
95
dbms_output.put_line('record not found');
ELSE
dbms_output.put_line('record is updated');
END IF;
END;
--OUTPUT--
ENO: 12
record not found
30: WRITE A PL/SQL PROGRAM THAT INCREASES THE
SALARIES OF THE EMPLOYEES OF THE EMP TABLE SUCH
THAT MANAGER SALARY IS INCREASED BY 10%,CLERK'S
SALARY IS INCREASED BY 8% AND 'SALESMAN' SALARY BY
5% ?
SOLUTION:
Declare
Cursor SAL_CURSOR IS
Select Eno,desg from Emp;
96
Post Emp.desg%TYPE;
Ecode Emp.Eno%TYPE;
Begin
OPEN sal_cursor;
LOOP
FETCH sal_cursor INTO Ecode,Post;
Exit when sal_cursor%NOTFOUND;
IF POST='MANAGER' THEN
UPDATE Emp SET salary=salary*1.10 where Eno=Ecode;
ELSIF POST='CLERK' THEN
UPDATE Emp SET salary=salary*1.08 where Eno=Ecode;
ELSIF POST=' SALESMAN' THEN
UPDATE Emp SET salary=salary*1.05 where Eno=Ecode;
END IF;
END LOOP;
CLOSE sal_cursor;
END;
--OUTPUT--
1 row(s) updated
97
31: Write a PL/SQL program to calculate maximum, minimum
and average salary department wise and display the results?
SOLUTION:
Declare
Cursor INFO_CURSOR IS
Select Dept,max(salary),Min(salary),Avg(salary) FROM EMP GROUP BY
DEPT;
Dcode Emp.Dept%TYPE;
Maxsal Emp.salary%TYPE;
Minsal EMP.salary%TYPE;
98
Avgsal Emp.salary%TYPE;
BEGIN
OPEN INFO_cursor;
LOOP
Fetch INFO_CURSOR INTO Dcode,Maxsal,Minsal,Avgsal;
Exit when INFO_CURSOR%NOTFOUND;
dbms_output.put_line (Dcode|| ' '||Maxsal || ' '||Minsal||' '||
Avgsal);
END LOOP;
CLOSE INFO_CURSOR;
END;
--OUTPUT--
30 12100 10100 11100
20 50100 25100 37600
40 17100 17100 17100
50 27100 27100 27100
10 15100 8100 11600
99
32: Write a PL/SQL program to print the NAME ALL VOTER WHO
HAS VOTE THIS YEAR using cursor FOR loop?
SOLUTION:
Declare
Cursor VOTE_Cursor IS
Select Vname from VOTER;
BEGIN
FOR V IN VOTE_CURSOR
LOOP
dbms_output.put_line(V.VNAME || ' GIVEN VOTE THIS YEAR');
100
END LOOP;
END;
--OUTPUT
GURSIMRAN KAUR GIVEN VOTE THIS YEAR
GAGANDEEP SINGH GIVEN VOTE THIS YEAR
RIMALJEET PAJPUT GIVEN VOTE THIS YEAR
ARJIT SACHDEVA GIVEN VOTE THIS YEAR
ARSHPREET SINGH GIVEN VOTE THIS YEAR
TANIA BEDI GIVEN VOTE THIS YEAR
PRIYANKA KAPOOR GIVEN VOTE THIS YEAR
33:To display the information of a given department number.
SOLUTION:
Declare
Cursor EMP_DATA IS
Select ENO,ENAME,SALARY From EMP where Dept= :Dept;
ECODE Emp.Eno%TYPE;
Name Emp.Ename%TYPE;
Sal Emp.salary%TYPE;
Begin
OPEN EMP_DATA;
101
LOOP
FETCH Emp_data INTO Ecode,Name,Sal;
EXIT WHEN Emp_data%NOTFOUND;
dbms_output.put_line(Ecode||' '||Name||' '||sal);
END LOOP;
CLOSE Emp_data;
END;
Output:-
DEPT: 40
5 gurpreet 17100
34:WRITE A PROGRAM IN PL/SQL TO LIST THE RECORDS OF
EMPLYEES FROM EMP TABLE WITHIN A GIVEN RANGE OF
SALARIES ?
SOLUTION:
Declare
Cursor Emp_Cursor(N1 Number,N2 number) IS
Select ename,salary from EMP where salary>=N1 and salary<=N2;
Sal Emp.salary%TYPE;
NAME EMP.ENAME%TYPE;
M number;
N number;
102
Begin
M:= :M;
N:= :N;
Open Emp_cursor(M,N);
LOOP
Fetch Emp_Cursor INTO Name,Sal;
Exit when Emp_Cursor%NOTFOUND;
dbms_output.put_line(RPAD (Name, 10)|| ' '||sal);
END LOOP;
CLOSE EMP_CURSOR;END;
--OUTPUT--
aman 15100
karampreet 12100
manjot 10100
gurpreet 17100
hardeep 11100
103
35:WRITE A LOCAL PROCEDURE THAT ACCEPT TWO NUMBER
AND PERFORM SELECTED ARITHMETIC OPERATION.
SOLUTION:
DECLARE
A NUMBER;
B NUMBER;
N NUMBER;
RESULT NUMBER;
PROCEDURE CALCULATOR(X NUMBER, Y NUMBER,N NUMBER,Z OUT
NUMBER) AS
BEGIN
IF(N=1) THEN
Z:=X+Y;
104
ELSIF(N=2) THEN
Z:=X-Y;
ELSIF(N=3) THEN
Z:=X*Y;
ELSE
Z:=X/Y;
END CALCULATOR;
BEGIN
A:=A;
B:=B;
N:=N;
CALCULATOR(A,B,N,RESULT);
DBMS_OUTPUT.PUT_LINE(RESULT=||RESULT);
END;
105
36:WRITE A PL/SQL FOR CREATING A STORED PROCEDURE
THAT ACCEPT TWO NUMBER AND PERFORM SELECTED
ARITHMETIC OPERATION.
SOLUTION:
CREATE OR REPLACE PROCEDURE CALCULATOR (X NUMBER,Y NUMBER, N
NUMBER) AS
Z NUMBER;
BEGIN
IF(N=1) THEN
Z:=X+Y;
DBMS_OUTPUT.PUT_LINE(ADDITION=||Z);
ELSIF(N=2) THEN
Z:=X-Y;
DBMS_OUTPUT.PUT_LINE(SUBTRACTION=||Z);
ELSIF(N=3) THEN
106
Z:=X*Y;
DBMS_OUTPUT.PUT_LINE(MULTIPLICATION=||Z);
ELSE
Z:=X/Y;
DBMS_OUTPUT.PUT_LINE(DIVISION=||Z);
END CALCULATOR;
37:WRITE A PL/SQL FOR CALLING STORED PROCEDURE
SOLUTION:
DECLARE
A NUMBER;
B NUMBER;
N NUMBER;
BEGIN
A:=:A;
B:=:B;
N:=:N;
CALCULATOR(A,B,N);
END;
107
38:WRITE PL/SQL PROCEDURE TO PERFORM UPDATION ON
EMP TABLE
SOLUTION:
DECLARE
ecode employee.eno%type;
sal employee.salary%type;
procedure updation(ecode number) as
BEGIN
update employee set salary=salary+500 where eno=ecode;
END updation;
BEGIN
ecode:= :ecode;
updation(ecode);
END;
--OUTPUT--
108
Statement processed.
select * from employee;
update employee set salary=salary+500 where eno=7;
salary updated
39:Write PL/SQL procedure to perform deletion on emp table
SOLUTION:
DECLARE
ecode employee.eno%type;
procedure deletion(ecode number) as
BEGIN
delete from employee where eno=ecode;
END deletion;
BEGIN
ecode:= :ecode;
deletion(ecode);
END;
Statement processed
select * from employee;
109
40:CREATE A STORED PROCEDURE TO DEBIT A BANK ACCOUNT.
THE USER MUST ENTER THE ACCOUNT NUMBER AND
AMOUNT TO BE DEBITED.THE MINIMUM BALANCE IN THE
ACCOUNT SHOULD BE 500. SUPPOSE THAT A TABLE BANK
CONTAINS THE ACCOUNT NUMBER AND BALANCE FIELDS
AND HAS 10 RECORDS INTO IT.
CREATE OR REPLACE PROCEDURE CHK_BALANCE(ACC NUMBER,AMOUNT
NUMBER)AS LESS_BALANCE EXCEPTION;
CURR_AMOUNT NUMBER (8,2);
SOLUTION
Begin
Select balance INTO curr_amount FROM Bank where Accno = Acc;
IF curr_amount>500 THEN
UPDATE Bank set balance = balance-amount Where accno = acc;
dbms_output.put_line ('updation successful');
ELSE
dbms_output.put_line(' Minimum balance should be 500');
END IF;
EXCEPTION
110
When No_data_found Then
dbms_output.put_line('Acc number '|| Acc||'not exists');
END chk_balance;
41:CREATE A FUNCTION TO CALCULATE THE PRODUCT OF TWO
NUMBERS AND THEN RETURN THESE VALUES.
SOLUTION
Declare
A number;
B number;
RESULT number;
Function product (A number,B number) Return number AS C number;
Begin
C := A * B;
Return(C);
End product;
Begin
A := :A;
B := :B;
RESULT := product(A,B);
dbms_output.put_line (' Product = '|| RESULT);
END;--OUTPUT--
111
Enter value for a: 4
Enter value for b: 3
Product 12
42:Create a function to display the salary of an employee from
EMP table whose employee number is given .
SOLUTION
Declare
Ecode emp.empno%TYPE;
Salary emp.sal%TYPE;
Function Calc_sal(E number) Return number AS S Emp.sal%TYPE;
Begin
Select sal INTO S FROM Emp where Empno =Ecode;
Return S;
EXCEPTION
when NO_DATA_FOUND then
return 0;
END calc_sal;
Begin
Ecode := :Ecode;
Salary := calc_sal (Ecode);
IF salary <> 0 THEN
112
dbms_output.put_line('salary = || salary);
ELSE
dbms_output.put_line(' Employee does not exit');
END IF;
END;
113
43:CREATE A STORED FUNCTION THAT COMPUTES THE
GREATEST OF THREE NUMBERS.
SOLUTION:
Create or Replace Function Greate (A number, B number,C number) Return
number AS
Begin
IF (A>B AND A>C) THEN
Return A;
ELSIF(A<B AND B>C) THEN
Return b;
ELSE
Return C;
END IF;
END Greatest;
--OUTPUT--
Enter value for a: 3
Enter value for b: 5
Enter value for c:1
114
44:WRITE A STORED FUNCTION THAT RETURN THE
INFORMATION FOR AN EMPLOYEE WHOSE 'EMPNO' IS BEGIN
ENTERED BY THE USER FROM EMP TABLE. MAKE USE OF %
ROWTYPE AS A RETURN DATA TYPE ?
Create or Replace function Emp_info (Ecode number)
Return EMP%ROWTYPE AS
S EMP%ROWTYPE;
Begin
Select * INTO S from EMP where Empno = Ecode;
Return S;
END emp_info;
--OUTPUT--
function created.
115
45:THUS A STORED FUNCTION ,'EMP_INFO' IS CREATED WHICH
IS THEN CALLED IN SUBSEQUENT PROGRAM.
SOLUTION
Declare
A emp%ROWTYPE;
Ecode emp.empno%type;
Begin
Ecode := : Ecode;
A := Emp_info (Ecode);
dbms_output.put_line('Name ='|| A. Ename);
dbms_output.put_line('Post ='|| A.Job);
dbms_output.put_line('Sal= '|| A.Sal);
EXCEPTION
WHEN NO_DATA_FOUND then
dbms_output.put_line ('No empno found');
END;
116
46:Create a stored function TAX that returns the tax
information of an employee from EMP table where each
employee has a salary.
Salary TAX
Less than or equal to 1000 No tax
Greater than 1000 but less 10% of salary above
than or equal to 2000 1000
Greater than 2000 Above tax plus 20% of
salary above 2000
SOLUTION
CREATE OR REPLACE FUNCTION TAX (S IN NUMBER)
RETURN NUMBER IS
BEGIN
IF (S<=1000) THEN
RETURN 0;
ELSIF (S>1000 AND S>=2000) THEN
RETURN (( S-1000)* 0.10);
ELSE
RETURN(100 + (s-2000)*0.20);
END ;
117
47:CREATE A FUNCTION THAT CONCATENATES ROW VALUES
INTO A SINGLE COLUMN VALUES .
SOLUTION
CREATE OR REPLACE FUNCTION rowcount (q IN VARCHAR2) RETURN VARCHAR2 IS
ret VARCHAR2 (2000);
hold VARCHAR2(2000);
cur sys_refcursor;
BEGIN
OPEN cur FOR q;
LOOP
FETCH CUR INTO HOLD;
EXIT WHEN cur%NOTFOUND;
IF ret ISNULL THEN
ret := hold;
ELSE
ret:= ret ||' , ' || hold;
END IF;
END LOOP;
Return ret;
END rowcount;
118
48:WRITE PL/SQL PACKAGE WHICH CONTAINS FUNCTION TO
RETURN SALARY OF A GIVEN EMPLOYEE CODE,A
PROCEDURE WHICH DISPLAYS EMPLOYEES OF GIVEN
DEPARTMENT NUMBER ABD ANOTHER PROCEDURE THAT
INCREMENT THE SALARY OF A GIVEN EMPLOYEE
SOLUTION
Create or replace package emp_pack AS
Function sal_check(ecode number) return;
Procedure emp_info(dno number);
Procedure sal_inc (ecode number);
END emp_pack;
Package Body
Create or replace package body emp_pack AS
Function sal_check (ecode number) return number AS
Salary emp.sal%TYPE;
BEGIN
Select sal into salary from emp where empno=ecode;
Return salary;
Exception
When no_data_found then
Return 0;
END sal_check;
119
Procedure emp_info(dno number) as
Cursor emp_cur is
Select * from emp where deptno=dno;
Begin
For I in emp_cur LOOP
Dbms_output.put_line(I.ename || || i.sal);
END LOOP;
END emp_info;
Procedure sal_inc(ecode number) as
BEGIN
Update emp set sal=sal+100 where empno=ecode;
If(SQL%FOUND) THEN
Dbms_output.put_line(data updated);
Else
Dbms_output.put_line(empno does not exists);
END IF;
END sal_inc;
END emp_pack;
120
49:WRITE PL/SQL PACKAGES WHICH CONSIST OF PROCEDURE
THAT UPDATES THE MARKS OF THE STUDENTS AND A
FUNCTION THAT RETURNS THE PERCENTAGE OF MARKS OF
A GIVEN STUDENT
SOLUTION
create or replace package emp_pack AS
PROCEDURE update_marks ( rno number);
FUNCTION percentage ( math number, dbms number, eng number, marks
number)return number;
END emp_pack;
alter package emp_pack COMPILE body;
create or replace package body emp_pack AS
procedure update_marks (rno number ) AS
BEGIN
update std56 set marks=500 where rollno:= :rno;
END update_marks;
function percentage (math number, dbms number , eng number, total_marks
number ) return number AS
per number;
begin
total_marks=math+dbms+eng;
per:= total_marks/300*100;
121
return(per);
END per;
BEGIN
math:= :math;
dbms:= :dbms;
eng:= :eng;
per:= percentage(math,dbms,eng);
dbms_output.put_line('per of student=' || per);
END emp_pack;
50:WRITE PL/SQL PACKAGE TO CREATE CALCULATOR
SOLUTION
122
create or replace package cal_pack AS
procedure add (a number ,b number );
FUNCTION subtract (d number , e number );
FUNCTION division (p number , q number);
FUNCTION multiply (x number , y number);
END cal_pack;
create or replace package body AS
FUNCTION add (a number, b number )return number
AS
c number;
BEGIN
a:= :a;
b:= :b;
c:= a+b;
dbms_output.put_line(' add of two numbers' || c);
END add;
create or replace package body AS
FUNCTIONsubtract(d number, e number )return number
AS
123
r number;
BEGIN
d:= :d;
e:= :e;
r:= d-e;
dbms_output.put_line(' subtract of two numbers' || r);
END subtract;
create or replace package body AS
FUNCTION division(p number, q number )return number
AS
r number;
BEGIN
p:= :p;
r:= :r;
r:= p/q;
dbms_output.put_line(' division of two numbers' || r);
END division;
create or replace package body AS
124
FUNCTION multiply(x number, y number )return number
AS
z number;
BEGIN
x:= :x;
y:= :y;
z:= x/y;
dbms_output.put_line(' multiply of two numbers' || z);
END multiply;
END cal_pack;
51:WRITE PL/SQL TRIGGER WHISH WILL ENSURE THAT THE
SALARY ENTERED IS VALID(I.E LESS THAN 10000)
SOLUTION
create or replace trigger check_sal
before update on employee
DECLARE
125
sal number(8);
BEGIN
if(sal>10000) then
dbms_output.put_line('salary entered is not valid');
END IF;
END;
Output:-
update employee set salary=20000 where dept_no=20;
salary entered is not valid
statement processed
52:WRITE PL/SQL TRIGGER WHICH IS FIRED WHEN ANY
DELETION OR UPDATION IS PERFORMED ON EMP TABLE
AND THE DATA IS STOTED TO LOG TABLE
SOLUTION
create or replace trigger emo_log
before update or delete on employee
126
for each row
begin
insert into log_table(eno,name,salary,dept_no,comm,desi,phone_no)
values
(:old.eno,:old.name,:old.salary,:old.dept_no,:old.comm,:old.desi,:old.phone_no);
END;
--OUTPUT--
delete from employee where salary=9000;
statement processed
53:WRITE PL/SQL TRIGGER WHISH WHEN FIRED DISPLAYS THE
DIFFERENCE BETWEEN UPDATED SALARY AND THE OLD
SALARY OF AN EMPLOYEE
SOLUTION
create or replace trigger sal_diff
after update on employee
for each row
127
DECLARE
curr_sal number(7);
new_salary number;
BEGIN
New_salary:= :new_salary;
curr_sal=:old.salary-:new.salary;
END;
--Output--
Enter value for new_salary: 5000
Suppose old sal is 15000
Curr_sal:= 10000
Statement processed
54:CREATE A TRIGGER WHICH IS FIRED WHENEVER THE
INVENTORY FOR A PRODUCT FALLS BELOW THE
ACCEPTABLE LIMIT . THE MESSAGE SHOULD BE SEND
BETWEEN SESSION.
128
PR_ID AMT_STOC REORDER_POINT
K
101 2000 1000
102 1200 1000
103 1400 500
104 1100 500
INVENTORY TABLE
PRODID DESC
101 SUGAR
102 WHEAT
103 RICE
104 MAIZE
PRODUCT TABLE
SOLUTION:
CREATE OR REPLACE TRIGGER RECORDS_Y_N
BEFORE UPDATE OF AMT_STOCK,RECORDER_POINT
ON INVENTORY
129
FOR EACH ROW
V_DESC PRODUCT.DESC%TYPE;
V_MSG VARCHAR2 (2000);
STAT_SEND NUMBER (1);
BEGIN
IF :NEW.AMT_STOCK<=:NEW.RECORDER_POINT THEN
SELECT DESC INTO V_DESC FROM PRODUCT WHERE PRO
DID=:NEW.PR_ID;
V_MSG:=INVENTORY LOW,SO ORDER||CHR(6)||PRODUCT P#=||
TO_CHAR(:NEW.PR_ID)||i.e||V.DESC||MESSAGE BY
USER=|USER||CHR(6);
ELSIF
:OLD.AMT.STOCK<:NEW.AMT_STOCK THEN NULL;
ELSE
V_MSG:=PRODUCT P#=||TO_CHAR(:NEW.PR_ID)||
ORDERED;
END IF;
DBMS_PIPE.PACK_MESSAGE(V_MSG);
STAT_SEND:=DBMS_PIPE.SEND_MESSAGE(INVPIPE);
END;
--OUTPUT
TRIGGER CREATED
130
55:CREATE A TRIGGER THAT RECORDS THE MODIFICATION
MADE TO THE EMP TABLE INTO THE EMO_LOG TABLE
EMPID USER_NAME CHANG_DAT TYP_OP OLD_SAL NEW_SAL
A
NUMBER( VARCHAR2(2 DATE VARCHAR2(1 NUMBER(9, NUMBER(9,
4) 0) 0) 2) 2)
SOLUTION:
CREATE OR REPLACE TRIGGER LOG_EMP
AFTER INSERT OR UPDATE OR DELETE ON EMP
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO EMP_LOG(EMPID,USER_NAME,CHANG_DATA,TYP_OP,
NEW_SAL,)VALUES(:NEW.EMPNO,USER,SYSDATE,INSERT,:NEW.SAL);
ELSIF UPDATING THEN
INSERT INTO EMP_LOG(EMPID,USER_NAME,CHANG_DATA,TYP_OP,
OLD_SAL,NEW_SAL)VALUES(:OLD.EMPNO,USER,SYSDATE,UPDATE,
:OLD.SAL,:NEW.SAL);
ELSE
INSERT INTO EMP_LOG(EMPID,USER_NAME,CHANG_DATE,TYP_OP,
OLD_SAL)VALUES(:OLD.EMPNO,USER,SYSDATE,DELETE,:OLD.SAL);
131
END IF;
END;
--OUTPUT
TRIGGER CREATED
132