Sie sind auf Seite 1von 132

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

Das könnte Ihnen auch gefallen