1.
Data Definition Command, Data Manipulation Commands for inserting,
updating, deleting and retrieving tables and Transaction Control
Statements.
DATA DEFINITION LANGUAGE (DDL) COMMANDS
SQL> create table employee(eno number(3) constraint
peno primary key, ename varchar2(20) not null,
sal number(12,2), dob date);
Table created.
SQL> desc employee
Name Null? Type
------------------------------- -------- ----
ENO NOT NULL NUMBER(3)
ENAME NOT NULL VARCHAR2(20)
SAL NUMBER(12,2)
DOB DATE
SQL> alter table employee add (dno number(3));
Table altered.
SQL> desc employee
Name Null? Type
------------------------------- -------- ----
ENO NOT NULL NUMBER(3)
ENAME NOT NULL VARCHAR2(20)
SAL NUMBER(12,2)
DOB DATE
DNO NUMBER(3)
SQL> alter table employee modify(eno number(5));
Table altered.
SQL> desc employee;
Name Null? Type
------------------------------- -------- ----
ENO NOT NULL NUMBER(5)
ENAME NOT NULL VARCHAR2(20)
SAL NUMBER(12,2)
DOB DATE
DNO NUMBER(3)
SQL> alter table employee drop constraint peno;
Table altered.
SQL> desc employee;
Name Null? Type
------------------------------- -------- ----
ENO NUMBER(5)
ENAME NOT NULL VARCHAR2(20)
SAL NUMBER(12,2)
DOB DATE
DNO NUMBER(3)
SQL> alter table employee add constraint peno primary key(eno);
Table altered.
SQL> desc employee;
Name Null? Type
------------------------------- -------- ----
ENO NOT NULL NUMBER(5)
ENAME NOT NULL VARCHAR2(20)
SAL NUMBER(12,2)
DOB DATE
DNO NUMBER(3)
SQL> truncate table employee;
Table truncated.
SQL> drop table employee;
Table dropped.
DATA MANIPULATION LANGUAGE(DML) COMMANDS
SQL> insert into employee(eno, ename, sal, dob, dno)
values(&eno, '&ename', &sal, '&dob', &dno);
Enter value for eno: 1
Enter value for ename: sivakumar
Enter value for sal: 10000
Enter value for dob: 11-apr-75
Enter value for dno: 1
old 2: values(&eno, '&ename', &sal, '&dob', &dno)
new 2: values(1, 'sivakumar', 10000, '11-apr-75', 1)
1 row created.
SQL> /
Enter value for eno: 2
Enter value for ename: muthu
Enter value for sal: 20000
Enter value for dob: 10-may-65
Enter value for dno: 1
old 2: values(&eno, '&ename', &sal, '&dob', &dno)
new 2: values(2, 'muthu', 20000, '10-may-65', 1)
1 row created.
EXAMPLE FOR PRIMARY KEY VIOLATION.
SQL> /
Enter value for eno: 1
Enter value for ename: rajesh
Enter value for sal: 15000
Enter value for dob: 20-jan-1976
Enter value for dno: 2
old 2: values(&eno, '&ename', &sal, '&dob', &dno)
new 2: values(1, 'rajesh', 15000, '20-jan-1976', 2)
insert into employee(eno, ename, sal, dob, dno)
*
ERROR at line 1:
ORA-00001: unique constraint ([Link]) violated
SQL> insert into employee(eno, ename, dob) values(&eno, '&ename', '&dob');
Enter value for eno: 4
Enter value for ename: dinesh
Enter value for dob: 1-may-81
old 1: insert into employee(eno, ename, dob) values(&eno, '&ename',
'&dob')
new 1: insert into employee(eno, ename, dob) values(4, 'dinesh', '1-may-
81')
1 row created.
SQL> insert into employee values(&1, '&2', &3, '&4', &5);
SQL> select * from employee;
ENO ENAME SAL DOB DNO
--------- -------------------- --------- --------- --------- ------
1 sivakumar 10000 11-APR-75 1
2 pmv chalam 20000 10-MAY-65 1
3 emanuel 30000 02-FEB-80 2
4 dinesh 01-MAY-81
5 sudha 10-JUN-82
6 muthuvel 50000 10-JUL-82 5
7 preetha 42000 13-JUL-80 5
8 karthika 7888 23-DEC-82 5
9 celestina 6000 21-JUL-82 5
10 shivkumar 50000 10-JUN-81 6
11 jegan 7000 12-MAR-80 6
11 rows selected.
SQL> update employee set sal = 4000, dno = 3 where eno = 4;
1 row updated.
SQL> update employee set sal = 70000, dno = 3 where ename = 'sudha';
1 row updated.
SQL> update employee set dno = 4 where dob = '13-jul-80';
1 row updated.
SELECT COMMAND - SIMPLE QUERIES
Q) DISPLAY ALL INFORMATION FROM EMPLOYEE TABLE.
SQL> select * from employee;
ENO ENAME SAL DOB DNO
--------- -------------------- --------- --------- --------
1 sivakumar 10000 11-APR-75 1
2 pmv chalam 20000 10-MAY-65 1
3 emanuel 30000 02-FEB-80 2
4 dinesh 4000 01-MAY-81 3
5 sudha 70000 10-JUN-82 3
6 muthuvel 50000 10-JUL-82 5
7 preetha 42000 13-JUL-80 4
8 karthika 7888 23-DEC-82 5
9 celestina 6000 21-JUL-82 5
10 shivkumar 50000 10-JUN-81 6
11 jegan 7000 12-MAR-80 6
11 rows selected.
Q) DISPLAY DEPARTMENT NUMBERS FROM EMPLOYEE TABLE.
SQL> select dno from employee;
DNO
---------
1
1
2
3
3
5
4
5
5
6
6
11 rows selected.
Q) DISPLAY DEPARTMENT NUMBERS FROM EMPLOYEE TABLE WITH OUT
DUPLICATE VALUES.
SQL> select distinct dno from employee;
DNO
---------
1
2
3
4
5
6
6 rows selected.
Q) DISPLAY EMPLOYEE NUMBER AND NAME FROM EMPLOYEE TABLE
SQL> select eno, ename from employee;
ENO ENAME
--------- --------------------
1 sivakumar
2 pmv chalam
3 emanuel
4 dinesh
5 sudha
6 muthuvel
7 preetha
8 karthika
9 celestina
10 shivkumar
11 jegan
11 rows selected.
Q) DISPLAY EMPLOYEE NAME WHEN EMPLOYEE NUMBER IS 2 OR 6 OR 8.
(USE IN)
SQL> select ename from employee where eno in (2,6,8);
ENAME
--------------------
karthika
muthuvel
sivakumar
Q) LIST EMPLOYEE NAME WHEN SALARY > 30000 OR DOB > 1-1-80
SQL> SELECT ENAME FROM EMPLOYEE WHERE SAL > 30000 OR DOB > '01-JAN-80';
ENAME
--------------------
emanuel
dinesh
sudha
muthuvel
preetha
karthika
celestina
shivkumar
jegan
9 rows selected.
Q) LIST EMPLOYEE NAMES WHEN SALARY > 7000 AND DNO =5
SQL> SELECT ENAME FROM EMPLOYEE WHERE SAL > 7000 AND DNO = 5;
ENAME
--------------------
muthuvel
karthika
Q) DISPLAY EMPLOYEE NUMBER, NAME AND SALARY WHEN DEPARTMENT
IS NOT 2 OR 4 OR 6.
(USE NOT IN)
SQL> select eno, ename, sal from employee where dno not in(2,4,6);
ENO ENAME SAL
--------- -------------------- ---------
1 sivakumar 10000
2 pmv chalam 20000
4 dinesh 4000
5 sudha 70000
6 muthuvel 50000
8 karthika 7888
9 celestina 6000
7 rows selected.
Q) DISPLAY EMPLOYEE NAME WHEN DOB IS 11TH APRIL 75 OR 10TH JUNE 81.
(USE ANY)
SQL> select ename from employee where dob = any('11-apr-75', '10-jun-81');
ENAME
--------------------
sivakumar
shivkumar
Q) DISPLAY NUMBER OF EMPLOYEES IN DEPARTMENT 5.
(USE COUNT FUNCTION)
SQL> select count(eno) from employee where dno = 5;
COUNT(ENO)
----------
3
Q) DISPLAY EMPLOYEE NUMBER, NAME AND SALARY FOR ODD EMPLOYEE NUMBERS.
(USE MOD FUNCTION)
SQL> select eno, ename, sal from employee where eno = 1 or (mod(eno,2) =
1);
ENO ENAME SAL
--------- -------------------- ---------
1 sivakumar 10000
3 emanuel 30000
5 sudha 70000
7 preetha 42000
9 celestina 6000
11 jegan 7000
6 rows selected.
Q) DISPLAY EMPLOYEE NAME WHEN SAL IS INBETWEEN 40000 AND 55000.
(USE BETWEEN)
SQL> select ename from employee where sal between 40000 and 55000;
ENAME
--------------------
muthuvel
preetha
shivkumar
Q) DISPLAY EMPLOYEE NAMES IN ALPHABETICAL ORDER.
SQL> select eno, ename, dno from employee order by ename;
ENO ENAME DNO
--------- -------------------- ---------
9 celestina 5
4 dinesh 3
3 emanuel 2
11 jegan 6
8 karthika 5
6 muthuvel 5
2 pmv chalam 1
7 preetha 4
10 shivkumar 6
1 sivakumar 1
5 sudha 3
11 rows selected.
Q) DISPLAY DEPARTMENT WISE TOTAL SALARY.
SQL> select dno, sum(sal) from employee group by dno;
DNO SUM(SAL)
--------- ---------
1 30000
2 30000
3 74000
4 42000
5 63888
6 57000
Q) DISPLAY DEPARTMENT WISE TOTAL SALARY ALONG WITH NUMBER OF
EMPLOYEES IN THE DEPARTMENT.
SQL> select dno, sum(sal), count(*) from employee group by dno;
DNO SUM(SAL) COUNT(*)
--------- --------- ---------
1 30000 2
2 30000 1
3 74000 2
4 42000 1
5 63888 3
6 57000 2
6 rows selected.
Q) DISPLAY DEPARTMENT WISE TOTAL SALARY ALONG WITH NUMBER OF
EMPLOYEES IN THE DEPARTMENT IF DEPARTMENT HAS MORE THAN ONE
EMPLOYEE.
SQL> select dno, sum(sal), count(*) from employee group by dno
2 having count(*) > 1;
DNO SUM(SAL) COUNT(*)
--------- --------- ---------
1 30000 2
3 74000 2
5 63888 3
6 57000 2
6 rows selected.
SQL> create table employee1 as select * from employee;
Table created.
SQL> insert into employee1 (select * from employee);
11 rows created.
SQL> select * from employee1;
ENO ENAME SAL DOB DNO
--------- -------------------- --------- --------- ---------
1 sivakumar 10000 11-APR-75 1
2 pmv chalam 20000 10-MAY-65 1
3 emanuel 30000 02-FEB-80 2
4 dinesh 4000 01-MAY-81 3
5 sudha 70000 10-JUN-82 3
6 muthuvel 50000 10-JUL-82 5
7 preetha 42000 13-JUL-80 4
8 karthika 7888 23-DEC-82 5
9 celestina 6000 21-JUL-82 5
10 shivkumar 50000 10-JUN-81 6
11 jegan 7000 12-MAR-80 6
11 rows selected.
DELETE COMMAND
Q) DELETE ALL RECORDS FROM EMPLOYEE1.
SQL> delete from employee1;
11 rows deleted.
Q) DELETE RECORDS FROM EMPLOYEE1 WHERE DNO IS 3 OR 5 OR 6.
SQL> delete from employee1 where dno in(3,5,6);
7 rows deleted.
SQL> select * from employee;
ENO ENAME SAL DOB DNO
--------- -------------------- --------- --------- ---------
1 sivakumar 10000 11-APR-75 1
2 pmv chalam 20000 10-MAY-65 1
3 emanuel 30000 02-FEB-80 2
4 dinesh 4000 01-MAY-81 3
5 sudha 70000 10-JUN-82 3
6 muthuvel 50000 10-JUL-82 5
7 preetha 42000 13-JUL-80 4
8 karthika 7888 23-DEC-82 5
9 celestina 6000 21-JUL-82 5
10 shivkumar 50000 10-JUN-81 6
11 jegan 7000 12-MAR-80 6
11 rows selected.
SQL> select * from employee1;
ENO ENAME SAL DOB DNO
--------- -------------------- --------- --------- ---------
1 sivakumar 10000 11-APR-75 1
2 pmv chalam 20000 10-MAY-65 1
3 emanuel 30000 02-FEB-80 2
7 preetha 42000 13-JUL-80 4
12 swetha 7888 02-FEB-89 6
13 manisha 5667 09-MAR-80 7
6 rows selected.
Q) RETRIEVE EMPLOYEE RECORDS FROM EMPLOYEE1 AND EMPLOYEE WITH OUT
DUPLICATION.
SQL> select eno, ename from employee1 union select eno, ename from
employee;
ENO ENAME
--------- --------------------
1 sivakumar
2 pmv chalam
3 emanuel
4 dinesh
5 sudha
6 muthuvel
7 preetha
8 karthika
9 celestina
10 shivkumar
11 jegan
12 swetha
13 manisha
13 rows selected.
Q) RETRIEVE EMPLOYEE RECORDS FROM EMPLOYEE1 AND EMPLOYEE WITH OUT
DUPLICATION.
SQL> select eno, ename from employee1 union all select eno, ename
from employee;
ENO ENAME
--------- --------------------
1 sivakumar
2 pmv chalam
3 emanuel
7 preetha
12 swetha
13 manisha
1 sivakumar
2 pmv chalam
3 emanuel
4 dinesh
5 sudha
6 muthuvel
7 preetha
8 karthika
9 celestina
10 shivkumar
11 jegan
17 rows selected.
Q) RETRIEVE COMMON EMPLOYEE RECORDS FROM EMPLOYEE AND EMPLOYEE1
SQL> select eno, ename from employee1 intersect select eno, ename
from employee;
ENO ENAME
--------- --------------------
1 sivakumar
2 pmv chalam
3 emanuel
7 preetha
Q) RETRIEVE EMPLOYEE RECORDS FROM EMPLOYEE1 WHICH IS NOT IN
EMPLOYEE TABLE.
SQL> select eno, ename from employee1 minus select eno, ename from
employee;
ENO ENAME
--------- --------------------
12 swetha
13 manisha
Q)DISPLAY SECOND MAXIMUM SALARY FROM EMPLOYEE TABLE
SQL> select max(sal) from employee where sal not in(select max(sal) from
employee);
MAX(SAL)
---------
50000
Q) FIND EMPLOYEE NAMES WHOSE SALARY ARE NOT MAXIMUM
AND BORN AFTER 1-1-82
SQL> select ename from employee where sal not in(select max(sal)
from employee) and dob in (select dob from employee where
dob > '1-jan-82');
ENAME
--------------------
muthuvel
celestina
karthika
DEMONSTRATION OF INTEGRITY CONSTRAINTS
SQL> create table student(sprno number(3) , name varchar2(20) not null,
mark1 number(3) constraint chm1 check(mark1 >0 and mark1 <=100),
mark2 number(3) constraint chm2 check(mark2 >0 and mark2 <=100),
mark3 number(3) constraint chm3 check(mark3 >0 and mark3 <=100),
constraint pksp primary key(sprno));
Table created.
SQL> desc student;
Name Null? Type
------------------------------- -------- ----
SPRNO NOT NULL NUMBER(3)
NAME NOT NULL VARCHAR2(20)
MARK1 NUMBER(3)
MARK2 NUMBER(3)
MARK3 NUMBER(3)
SQL> insert into student values(1, 'sivakumar', 34, 78, 89);
1 row created.
SQL> insert into student(sprno, mark1,mark2,mark3) values(1, 23, 78, 89);
insert into student(sprno, mark1,mark2,mark3) values(1, 23, 78, 89)
*
ERROR at line 1:
ORA-01400: cannot insert NULL into ("SCOTT"."STUDENT"."NAME")
SQL> insert into student(sprno, name,mark1,mark2,mark3)
values(1,'kowsalya', -3, 78, 89);
insert into student(sprno, name,mark1,mark2,mark3)
values(1,'kowsalya', -3, 78, 89)
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.CHM1) violated
SQL> insert into student values(1, 'kalaivani', 89,89,89);
insert into student values(1, 'kalaivani', 89,89,89)
*
ERROR at line 1:
ORA-00001: unique constraint ([Link]) violated
SQL> alter table student drop constraint pksp;
Table altered.
SQL> insert into student values(1, 'sithirizwana', 89,89,89);
1 row created.
SQL> create table d(dno number(3) primary key, dname varchar2(20));
Table created.
SQL> select * from d;
DNO DNAME
--------- --------------------
1 edp
2 accounts
3 marketting
SQL> commit;
Commit complete.
SQL> create table e(eno number(3) primary key, ename varchar2(20) not null,
2 dno number(3) references d(eno), salary number(12,2) check(sal > 0));
dno number(3) references d(dno), salary number(12,2) check(salary > 0))
Table created.
SQL> insert into e values(3, 'gokila', 5, 7888);
insert into e values(3, 'gokila', 5, 7888)
*
ERROR at line 1:
ORA-02291: integrity constraint (SCOTT.SYS_C00611) violated -
parent key not found
NESTED QUERIES AND JOIN OPERATION.
NESTED QUERIES
SQL> desc emp_det;
Name Null? Type
------------------------------- -------- ----
ENO NOT NULL NUMBER(3)
ENAME VARCHAR2(25)
ADDRESS VARCHAR2(30)
BASIC_SALARY NUMBER(12,2)
JOB_STATUS VARCHAR2(15)
DNO NUMBER(3)
SQL> desc pro_det;
Name Null? Type
------------------------------- -------- ----
PNO NOT NULL NUMBER(3)
PNAME VARCHAR2(30)
NOS_OF_STAFF NUMBER(3)
SQL> desc work_in;
Name Null? Type
------------------------------- -------- ----
PNO NUMBER(3)
ENO NUMBER(3)
PJOB CHAR(12)
Here pno is reference key for pno of pro_det and eno is the reference key
of emp_det
SQL> select * from emp_det;
ENO ENAME ADDRESS BASIC_SALARY JOB_STATUS DNO
-----------------------------------------------------------------
1 saravanakumar xyz nagar 8000 manager 10
2 mahendran abc colony 5000 assistant 10
3 rajkumar raj street 10000 manager 2
4 geetha abc nagar 7800 professor 3
5 shirley xmp colony 8000 manager 3
6 elamathi kk nagar 7888.9 assistant 2
7 rajesh mm nagar 0000 professor 2
7 rows selected.
SQL> select * from pro_det;
PNO PNAME NOS_OF_STAFF
--------- ------------------------------ ------------
1 DBMS 3
2 COMPILER 2
3 C 3
SQL> select * from work_in;
PNO ENO PJOB
--------- --------- ------------
1 1 programmer
2 1 analyst
1 2 analyst
2 2 programmer
Q) Find the names of all employees who do not work in department where
geetha
is working.
SQL> select ename from emp_det where dno not in(select dno from emp_det
2 where ename = 'geetha');
ENAME
-------------------------
saravanakumar
mahendran
rajkumar
elamathi
Q) Find names of employees who are working in the same department with
shirley
SQL> select ename, dno from emp_det where dno = (select dno from emp_det
2 where ename = 'shirley') order by ename;
ENAME DNO
------------------------- ---------
geetha 3
shirley 3
Q) Find the names of employees who are working in DBMS project
SQL> select ename from emp_det where eno in(select eno from
2 work_in where pno = (select pno from pro_det where pname = 'DBMS'))
3* order by ename
ENAME
-------------------------
mahendran
saravanakumar
Q) Find names and basic salary of those employees of the department
with dno 2 who get more salary than the salary the highest paid
employee of the department with dno 10
SQL> select ename, basic_salary from emp_det where dno = 2 and basic_salary
>
2* (select max(basic_salary) from emp_det where dno = 10) order by ename
ENAME BASIC_SALARY
------------------------- ------------
rajkumar 10000
Q) Find name, job_status, basic_salary of those employees in
rajesh's department
who get same salary as him.
SQL> select ename, job_status, basic_salary from emp_det
where(dno, basic_salary) in
2 (select dno, basic_salary from emp_det where ename = 'rajesh');
ENAME JOB_STATUS BASIC_SALARY
------------------------- --------------- ------------
rajkumar manager 10000
rajesh professor 10000
Q) Find the names of all projects in which employees are working.
SQL> select pno,pname from pro_det where exists(select pno from
work_in where work_in.pno = pro_det.pno)
PNO PNAME
--------- ------------------------------
1 DBMS
2 COMPILER
Q) Find the employee name, project name and job names in projects. The
employees who are not associated with any project will not be considered
SQL>select [Link], [Link], [Link] from emp_det e, pro_det p, work_in w
2* where ([Link] = [Link]) and ([Link] = [Link])
ENAME PNAME PJOB
------------------------- ------------------------------ ------------
saravanakumar DBMS programmer
saravanakumar COMPILER analyst
mahendran DBMS analyst
mahendran COMPILER programmer
JOIN OPERATION
SQL> create table employ1(eno number(3) primary key, ename varchar2(20),
bp number(12,2), da number(8,2), hra number(8,2), tax number(8,2),
dno number(3));
Table created.
SQL> create table depart1(dno number(3) primary key, dname varchar2(20));
Table created.
SQL> select * from depart1;
DNO DNAME
--------- --------------------
10 cse
20 ece
30 mec
SQL> select * from employ1;
ENO ENAME BP DA HRA TAX DNO
--------- ----------- --------- --------- --------- --------- ---------
1 shivkumar 4000 1000 200 90 10
2 niveditha 6000 500 200 120 10
3 koushika 3000 1500 300 89 20
4 vijay 10000 5000 899 3000 20
5 muralikrishnan 3000 2000 788 900 10
6 avelin raja 3000 1200 89 200 20
6 rows selected.
EQUI JOIN
SQL> select ename, dname from depart1, employ1 where [Link]
= [Link];
ENAME DNAME
-------------------- --------------------
shivkumar cse
niveditha cse
koushika ece
vijay ece
muralikrishnan cse
avelin raja ece
6 rows selected.
SQL> select ename, dname from depart1, employ1 where [Link]
> [Link]
ENAME DNAME
-------------------- ------
shivkumar ece
shivkumar mec
niveditha ece
niveditha mec
koushika mec
vijay mec
muralikrishnan ece
muralikrishnan mec
avelin raja mec
9 rows selected.
SELF JOIN
SQL> select [Link] from employ1 e where [Link] > [Link];
ENAME
--------------------
shivkumar
niveditha
koushika
OUTER JOIN
SQL> select ename, dname from depart1, employ1 where
[Link](+) = [Link];
ENAME DNAME
-------------------- ----------
shivkumar cse
niveditha cse
muralikrishnan cse
koushika ece
vijay ece
avelin raja ece
mec
7 rows selected.
SQL> select ename, dname from depart1, employ1 where
[Link](+) = [Link]
ENAME DNAME
-------------------- --------------------
shivkumar cse
niveditha cse
koushika ece
vijay ece
muralikrishnan cse
avelin raja ece
6 rows selected.
DATA CONTROL LANGUAGE COMMANDS
TO VIEW THE CURRENT USER
SQL> SHOW USER
user is "SCOTT"
SQL> SELECT * FROM EMPLOYEE;
ENO ENAME SAL DOB DNO
--------- -------------------- --------- --------- ---------
1 sivakumar 10000 11-APR-75 1
2 pmv chalam 20000 10-MAY-65 1
3 emanuel 30000 02-FEB-80 2
4 dinesh 4000 01-MAY-81 3
5 sudha 70000 10-JUN-82 3
6 muthuvel 50000 10-JUL-82 5
7 preetha 42000 13-JUL-80 4
8 karthika 7888 23-DEC-82 5
9 celestina 6000 21-JUL-82 5
10 shivkumar 50000 10-JUN-81 6
11 jegan 7000 12-MAR-80 6
11 rows selected.
Q) GIVE SELECT PERMISSION ON EMPLOYEE TABLE
TO DEMO USER.
SQL> GRANT SELECT ON EMPLOYEE TO DEMO;
Grant succeeded.
SQL> SHOW USER
user is "DEMO"
SQL> SELECT * FROM [Link];
ENO ENAME SAL DOB DNO
--------- -------------------- --------- --------- ---------
1 sivakumar 10000 11-APR-75 1
2 pmv chalam 20000 10-MAY-65 1
3 emanuel 30000 02-FEB-80 2
4 dinesh 4000 01-MAY-81 3
5 sudha 70000 10-JUN-82 3
6 muthuvel 50000 10-JUL-82 5
7 preetha 42000 13-JUL-80 4
8 karthika 7888 23-DEC-82 5
9 celestina 6000 21-JUL-82 5
10 shivkumar 50000 10-JUN-81 6
11 jegan 7000 12-MAR-80 6
11 rows selected.
SQL> INSERT INTO [Link] VALUES(12, 'Sheerin',
2 30000, '20-JAN-79', 6);
INSERT INTO [Link] VALUES(12, 'Sheerin',
*
ERROR at line 1:
ORA-01031: insufficient privileges
Q) GIVE UPDATE OF ENAME ON EMPLOYEE TO DEMO
USER
SQL> GRANT UPDATE(ENAME) ON EMPLOYEE TO DEMO;
Grant succeeded.
SQL> SHOW USER
user is "DEMO"
SQL> UPDATE [Link] SET ENAME = 'MANONMANI'
2 WHERE ENO = 2;
1 row updated.
SQL> UPDATE [Link] SET SAL = 60000 WHERE ENO = 2;
UPDATE [Link] SET SAL = 60000 WHERE ENO = 2
*
ERROR at line 1:
ORA-01031: insufficient privileges
Q) REMOVE SELECT PERMISSION FROM DEMO USER
SQL> REVOKE SELECT ON EMPLOYEE FROM DEMO;
Revoke succeeded.
Q) REMOVE UPDATE PERMISSION OF ACCESSING ENAME
ON EMPLOYEE TABLE FROM DEMO USER.
SQL> REVOKE UPDATE(ENAME) ON EMPLOYEE FROM DEMO;
REVOKE UPDATE(ENAME) ON EMPLOYEE FROM DEMO
*
ERROR at line 1:
ORA-01750: UPDATE/REFERENCES may only be REVOKEd from the whole
table, not by column
SQL> REVOKE UPDATE ON EMPLOYEE FROM DEMO;
Revoke succeeded.
Row Level Lock
SQL> SELECT * FROM EMPLOYEE WHERE ENO = 2 FOR UPDATE OF
ENAME;
EXAMPLE FOR COLUMN LEVEL LOCK
SQL> LOCK TABLE EMPLOYEE IN SHARE MODE;
Table(s) Locked.
SQL> LOCK TABLE EMPLOYEE IN SHARE UPDATE MODE;
Table(s) Locked.
SQL> LOCK TABLE EMPLOYEE IN EXCLUSIVE MODE;
Table(s) Locked.
SQL> LOCK TABLE EMPLOYEE IN EXCLUSIVE MODE NOWAIT;
Table(s) Locked.
SQL> LOCK TABLE EMPLOYEE IN EXCLUSIVE MODE NOWAIT;
LOCK TABLE EMPLOYEE IN EXCLUSIVE MODE NOWAIT
*
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified
NOTE
LOCKS CAN BE RELEASED BY ISSUING COMMIT OR ROLLBACK
TRANSACTION CONTROL LANGUAGE(TCL COMMANDS)
SQL> update employee set ename = 'sivakumar' where eno = 1;
1 row updated.
SQL> savepoint a;
Savepoint created.
SQL> update employee set ename = 'pmvchalam' where sal = 20000;
1 row updated.
SQL> savepoint b;
Savepoint created.
SQL> select * from employee;
ENO ENAME SAL DOB DNO
--------- -------------------- --------- --------- ---------
12 RAJA 30000 01-JAN-01 6
1 sivakumar 10000 11-APR-75 1
2 pmvchalam 20000 10-MAY-65 1
3 emanuel 30000 02-FEB-80 2
4 dinesh 4000 01-MAY-81 3
5 sudha 70000 10-JUN-82 3
6 muthuvel 50000 10-JUL-82 5
7 preetha 42000 13-JUL-80 4
8 karthika 7888 23-DEC-82 5
9 celestina 6000 21-JUL-82 5
10 shivkumar 50000 10-JUN-81 6
11 jegan 7000 12-MAR-80 6
12 rows selected.
SQL> rollback to savepoint a;
Rollback complete.
SQL> select * from employee;
ENO ENAME SAL DOB DNO
--------- -------------------- --------- --------- ---------
12 RAJA 30000 01-JAN-01 6
1 sivakumar 10000 11-APR-75 1
2 [Link] 20000 10-MAY-65 1
3 emanuel 30000 02-FEB-80 2
4 dinesh 4000 01-MAY-81 3
5 sudha 70000 10-JUN-82 3
6 muthuvel 50000 10-JUL-82 5
7 preetha 42000 13-JUL-80 4
8 karthika 7888 23-DEC-82 5
9 celestina 6000 21-JUL-82 5
10 shivkumar 50000 10-JUN-81 6
11 jegan 7000 12-MAR-80 6
12 rows selected.
SQL> commit;
Commit complete.
SQL> select * from employee;
ENO ENAME SAL DOB DNO
--------- -------------------- --------- --------- ---------
12 RAJA 30000 01-JAN-01 6
1 sivakumar 10000 11-APR-75 1
2 [Link] 20000 10-MAY-65 1
3 emanuel 30000 02-FEB-80 2
4 dinesh 4000 01-MAY-81 3
5 sudha 70000 10-JUN-82 3
6 muthuvel 50000 10-JUL-82 5
7 preetha 42000 13-JUL-80 4
8 karthika 7888 23-DEC-82 5
9 celestina 6000 21-JUL-82 5
10 shivkumar 50000 10-JUN-81 6
11 jegan 7000 12-MAR-80 6
12 rows selected.
SQL> rollback to savepoint b;
rollback to savepoint b
*
ERROR at line 1:
ORA-01086: savepoint 'B' never established
VIEWS, SEQUENCES AND SYNONYMS.
CREATING VIEWS AND DML OPERATIONS WITH VIEWS
SQL> create table student_info(sprno number(3) primary key,
2 name varchar2(20), mark1 number(3), mark2 number(3),
3 mark3 number(3));
Table created.
SQL> desc student_info
Name Null? Type
------------------------------- -------- ----
SPRNO NOT NULL NUMBER(3)
NAME VARCHAR2(20)
MARK1 NUMBER(3)
MARK2 NUMBER(3)
MARK3 NUMBER(3)
SQL> select * from student_info;
SPRNO NAME MARK1 MARK2 MARK3
--------- -------------------- --------- --------- ---------
1 varshini 89 45 76
2 narmatha 90 78 9
3 manisha 89 90 78
4 preetha 90 89 6
5 thirunavukarasu 89 67 98
6 rajasekar 87 78 67
7 gunasekar 89 67 56
SQL> create view stud_view as select name, mark1 from
student_info with read only;
View created.
SQL> select * from stud_view;
NAME MARK1
-------------------- ---------
varshini 89
narmatha 90
manisha 89
preetha 90
thirunavukarasu 89
rajasekar 87
gunasekar 89
7 rows selected.
SQL> select mark2 from stud_view;
select mark2 from stud_view
*
ERROR at line 1:
ORA-00904: invalid column name
SQL> insert into stud_view values('Badri', 89);
insert into stud_view values('Badri', 89)
*
ERROR at line 1:
ORA-01733: virtual column not allowed here
SQL> create view mark_view as select sprno, name from
student_info where mark1=89 with check option;
View created.
SQL> select * from mark_view;
SPRNO NAME
--------- --------------------
1 varshini
3 manisha
5 thirunavukarasu
7 gunasekar
7 rows selected.
SQL> create view myview as select sprno, name from student_info
View created.
SQL> select * from myview;
SPRNO NAME
--------- --------------------
1 varshini
2 narmatha
3 manisha
4 preetha
5 thirunavukarasu
6 rajasekar
7 gunasekar
7 rows selected.
SQL> insert into myview values(8, 'magaranth');
1 row created.
SQL> select * from student_info;
SPRNO NAME MARK1 MARK2 MARK3
--------- -------------------- --------- --------- ---------
1 varshini 89 45 76
2 narmatha 90 78 9
3 manisha 89 90 78
4 preetha 90 89 6
5 thirunavukarasu 89 67 98
6 rajasekar 87 78 67
7 gunasekar 89 67 56
8 magaranth
8 rows selected.
SQL> update myview set name = 'lakshmikandan' where sprno=8;
1 row updated.
SQL> select * from myview;
SPRNO NAME
--------- --------------------
1 varshini
2 narmatha
3 manisha
4 preetha
5 thirunavukarasu
6 rajasekar
7 gunasekar
8 lakshmikandan
8 rows selected.
SQL> select * from student_info;
SPRNO NAME MARK1 MARK2 MARK3
--------- -------------------- --------- --------- ---------
1 varshini 89 45 76
2 narmatha 90 78 9
3 manisha 89 90 78
4 preetha 90 89 6
5 thirunavukarasu 89 67 98
6 rajasekar 87 78 67
7 gunasekar 89 67 56
8 lakshmikandan
8 rows selected.
SQL> delete from myview where sprno=8;
1 row deleted.
SQL> create view ourview(rollno, physics) as select sprno,
mark1 from student_info;
View created.
SQL> select * from our view;
ROLLNO PHYSICS
--------- ---------
1 89
2 90
3 89
4 90
5 89
6 87
7 89
rows selected.
SQL> create table student_info1(sprno number(3) primary key, games
number(3));
Table created.
SQL> insert into student_info1 values(1, 89)
1 row created.
SQL> insert into student_info1 values(2, 90);
1 row created.
SQL>create view join_view as select name from student_info
* , student_info1 where student_info.sprno = student_info1.sprno
View created.
SQL> select name from join_view;
NAME
--------------------
varshini
narmatha
Creating Index
SQL> create table employ(eno number(3) constraint pkeno
2 primary key, ename varchar2(20), dno number(3),
3 sal number(12,2));
Table created.
SQL> desc employ;
Name Null? Type
------------------------------- -------- ----
ENO NOT NULL NUMBER(3)
ENAME VARCHAR2(20)
DNO NUMBER(3)
SAL NUMBER(12,2)
SQL> create index ind_dno on employ(dno);
Index created.
SQL> drop index ind_dno;
Index dropped.
Built in functions
SQL> SELECT * FROM DUAL;
D
-
X
SQL> DESC DUAL;
Name Null? Type
------------------------------- -------- ----
DUMMY VARCHAR2(1)
Date functions
SQL> SELECT ADD_MONTHS(SYSDATE, 2) FROM DUAL;
ADD_MONTH
---------
13-APR-01
SQL> SELECT SYSDATE FROM DUAL;
SYSDATE
---------
13-FEB-01
SQL> SELECT SYSDATE, LAST_DAY(SYSDATE) FROM DUAL;
SYSDATE LAST_DAY(
--------- ---------
13-FEB-01 28-FEB-01
SQL> SELECT MONTHS_BETWEEN(TO_DATE('04-MAY-2001', 'DD-MON-YYYY'),
2 TO_DATE('14-FEB-2001', 'DD-MON-YYYY')) FROM DUAL;
MONTHS_BETWEEN(TO_DATE('04-MAY-2001','DD-MON-YYYY'),TO_DATE('14-FEB-2001',
--------------------------------------------------------------------------
'DD-MON-YYYY'))
---------------
2.6774194
SQL> SELECT NEXT_DAY(SYSDATE, 'SUNDAY') FROM DUAL;
NEXT_DAY(
---------
18-FEB-01
SQL> SELECT ROUND(SYSDATE, 'YEAR') FROM DUAL;
ROUND(SYS
---------
01-JAN-01
SQL> SELECT ROUND(SYSDATE, 'MONTH') FROM DUAL;
ROUND(SYS
---------
01-FEB-01
SQL> SELECT ROUND(SYSDATE, 'DAY') FROM DUAL;
ROUND(SYS
---------
11-FEB-01
SQL> SELECT TRUNC(SYSDATE,'YEAR') FROM DUAL;
TRUNC(SYS
---------
01-JAN-01
SQL> SELECT TRUNC(SYSDATE, 'MONTH') FROM DUAL;
TRUNC(SYS
---------
01-FEB-01
SQL> SELECT TRUNC(SYSDATE, 'DAY') FROM DUAL;
TRUNC(SYS
---------
11-FEB-01
SQL> SELECT GREATEST(SYSDATE, TO_DATE('11-APR-2001', 'DD-MON-
YYYY')) FROM DUAL;
GREATEST(
---------
11-APR-01
SQL> SELECT SYSDATE+10 FROM DUAL;
SYSDATE+1
---------
Character functions
SQL> SELECT INITCAP('saravana devi') from dual;
INITCAP('SARAVANA
----------------
Saravana Devi
SQL> select lower('VELMURUGAN') from dual;
LOWER(
------
velmurugan
SQL> select upper('surya') from dual;
UPPER('SU
---------
SURYA
SQL> select ltrim('IloveIndia', 'India') from dual;
LTRIM('IL
---------
loveIndia
SQL> select rtrim('IloveIndia', 'India') from dual;
RTRIM
-----
Ilove
SQL> select translate('jack', 'j', 'b') from dual;
TRAN
----
back
SQL> select translate('jack', 'j', 'bl') from dual;
TRAN
----
back
SQL> select replace('jack and jue', 'j', 'bl') from dual;
REPLACE('JACKA
--------------
black and blue
SQL> select substr('sivasumaiyakumar', 5, 7) from dual;
SUBST
-----
sumaiya
SQL> select name from sample where soundex(name) = soundex('smith');
NAME
--------------------
smith
smythe
SQL> select name from sample where soundex(name) = soundex('imayon');
NAME
--------------------
Imayon
Miscellaneous Functions
SQL> select uid from dual;
UID
---------
20
SQL> select user from dual;
USER
------------------------------
SCOTT
SQL> select vsize('ganeshmanikandan') from dual;
VSIZE('GANESHMANIKANDAN')
-------------------------
16
SQL> select count(*) from employee;
COUNT(*)
---------
5
SQL> select * from employee;
ENO ENAME DNO SAL
--------- ------------------------------ --------- ---------
111 sivakumar 1 8000
555 santhanapandian 3 10000
333 jeevan isnovar 4 50000
444 nandakumar 5 25000
222 manojkumar 6 30000
SQL> insert into employee1 values(111, 'sivakumar',1,8000);
1 row created.
SQL> select * from employee1;
ENO ENAME DNO SAL
--------- ------------------------------ --------- ---------
666 Seetha 4 10000
777 Janani 7 8000
888 akila 9 50000
999 priyanka 7 9000
112 karthiga 4 8999
111 sumaiya 1 8000
555 sivakumar 3 10000
111 priya 1 8000
8 rows selected.
Group functions
SQL> select count(distinct eno) from employee1;
COUNT(DISTINCTENO)
------------------
7
SQL> select avg(sal) from employee1;
AVG(SAL)
---------
13999.875
SQL> select sum(sal) from employee1;
SUM(SAL)
---------
111999
SQL> select min(sal) from employee1;
MIN(SAL)
---------
8000
SQL> select max(sal) from employee1;
MAX(SAL)
---------
50000
Mathematical functions
SQL> select abs(-89) from dual;
ABS(-89)
---------
89
SQL> select ceil(6.2) from dual;
CEIL(6.2)
---------
7
SQL> select floor(100.7) from dual;
FLOOR(100.7)
------------
100
SQL> select power(2,3) from dual;
POWER(2,3)
----------
8
SQL> select sqrt(64) from dual;
SQRT(64)
---------
8
SQL> select mod(3,2) from dual;
MOD(3,2)
---------
1
SQL> select exp(1) from dual;
EXP(1)
---------
2.7182818
SQL> select sin(90) from dual;
SIN(90)
---------
SQL> select round(7.235, 2) from dual;
ROUND(7.235,2)
--------------
7.24
SQL> select trunc(7.235, 2) from dual;
TRUNC(7.235,2)
--------------
7.23
Database Programming: Implicit and Explicit Cursors.
PL/SQL
01. Write a PL/SQL code to find the biggest of three numbers.
declare
n1 number;
n2 number;
n3 number;
begin
n1 := &n1;
n2 := &num2;
n3 := &num3;
if ( n1 > n2 and n1 > n3) then
dbms_output.put_line( n1 || ' is biggest');
elsif (n2 > n3 ) then
dbms_output.put_line( n2 || ' is biggest');
else
dbms_output.put_line( n3 || ' is biggest');
end if;
end;
Output:
SQL> set serverout on;
SQL> @ E:/[Link]
Enter value for n1: 8
old 6: n1 := &n1;
new 6: n1 := 8;
Enter value for num2: 10
old 7: n2 := &num2;
new 7: n2 := 10;
Enter value for num3: 100
old 8: n3 := &num3;
new 8: n3 := 100;
100 is biggest
PL/SQL procedure successfully completed.
02. Write a PL/SQL code to find whether the given number is odd or even.
declare
n number;
begin
n:=&n;
if(mod(n,2)=0)then
dbms_output.put_line(n||'is even');
else
dbms_output.put_line(n||'is odd');
end if;
end;
Output:
SQL> @ E:/[Link]
Enter value for n: 5
old 4: n:=&n;
new 4: n:=5;
5 is odd
PL/SQL procedure successfully completed.
SQL> /
Enter value for n: 6
old 4: n:=&n;
new 4: n:=6;
6 is even
PL/SQL procedure successfully completed.
03. PLSQL Program to calculate Dearness Allowance for employees working in
an organization.
Employee table creation :
create table employ(eno number(3) primary key, ename varchar2(30), bpay
number(12,2))
Adding records to the employee table :
insert into employ values(&eno, '&ename', &bpay);
SQL> declare
2 erec employ%rowtype;
3 da [Link]%type;
4 cursor c is select * from employ;
5 begin
6 for erec in c
7 loop
8 if([Link] > 20000) then
9 da := 0.05*[Link];
10 elsif ([Link] > 10000) then
11 da := 0.10*[Link];
12 else
13 da := 0.15*[Link];
14 end if;
15 dbms_output.put_line(rpad([Link], 5) ||rpad( [Link], 30)||
rpad([Link], 15)||da);
16 end loop;
17 end;
18 /
1 dineshraj 13000 1300
2 aravind 15000 1500
3 shenbagapandian 18000 1800
4 prasanna 17000 1700
5 Balachander 11000 1100
6 Mohankumar 12000 1200
7 Sreekanth 14000 1400
8 Lisiver 16000 1600
9 Yuvaraj 10000 1000
10 Keshav 19000 1900
PL/SQL procedure successfully completed.
04. PL/SQL program to calculate total and average of marks for the
students.
Creating Student table :
create table studen(rollno number(3) primary key, name varchar2(30), dbms
number(3), os number(3))
Adding records to the student table
insert into studen values(&rollno, '&name', &dbms, &os);
SQL> declare
2 srec studen%rowtype;
3 total [Link]%type;
4 average number(12,2);
5 cursor c is select * from studen;
6 begin
7 for srec in c
8 loop
9 total := [Link] + [Link];
10 average := ([Link] + [Link])/2;
11 dbms_output.put_line(rpad([Link], 7)||rpad([Link], 30)||
rpad([Link], 5)|| rpad([Link], 5)||rpad(total, 7)||rpad(average, 10));
12 end loop;
13 end;
14 /
1 ganga 98 89 187 93.5
2 saranya 76 89 165 82.5
3 divya 89 67 156 78
4 vignesh 89 67 156 78
5 micky praveen 89 78 167 83.5
6 rajamohamed 76 89 165 82.5
7 sandru 98 89 187 93.5
PL/SQL procedure successfully completed.
Trigger
01. Create a trigger for employee table (denoted by empl) which
makes the entry in name column in uppercase.
SQL>create or replace trigger uppcase before insert on empl
referencing new as n for each row
begin
:[Link]:=upper(:[Link]);
end;
To compile: @ [Link]
Output:
Trigger Created.
SQL> insert into empl values (&empno, &ename, &job, &mgr,
&hiredate, &sal, &deptno);
1 row created.
SQL> /
EMPNO ENAME JOB MGR HIREDATE SAL DEPTNO
------- ------- ------ ----- --------- ----- ----------
1 MUHILAN gffgh 7898 11-jul-06 6789 11
02. Create a trigger for inserting, updating records into
employee table (denoted by empl) and salary should not be greater
than 1000.
SQL>create or replace trigger salary before insert or update on
empl referencing new as n for each
begin
if(:[Link]>1000) then
raise_application_error(-20001,'Salary should not be greater than 1000');
end if;
end;
To compile: @ [Link]
Output:
Trigger created.
SQL> insert into empl values(&empno,&ename,&job,&mgr,
&hiredate,&sal,&deptno);
insert into empl values(9,'anu','analyst',1234,
*
ERROR at line 1:
ORA-20001: Salary must be greater than 1000
ORA-06512: at "[Link]", line 3
ORA-04088: error during execution of trigger '[Link]'
03. Create a trigger on employee table (denoted by empl) that
avoids deletion on Thursdays.
SQL> create or replace trigger thurs before delete on empl
declare date1 char(3);
begin
date1:=to_char(sysdate,'dy');
if date1 in ('THU','thu') then
raise_application_error(-20002,'Records cannot be deleted on thursdays');
end if;
end;
To compile: @ [Link]
Output:
Trigger created.
SQL> delete from emp;
delete from emp
*
ERROR at line 1:
ORA-20002:Records cannot be deleted on Thursdays.
ORA-04088:error during execution of triggeres [Link]
Procedure
01. Create a table employee which has the following columns: eno,
ename, sal and write a procedure to display the employee details
of given employee number.
Procedure: ([Link])
create or replace procedure p3( num number) is
erec emp%rowtype;
begin
select eno,ename into [Link],[Link] from emp where eno = num;
dbms_output.put_line('Employee number: '||[Link]);
dbms_output.put_line('Employee name: '||[Link]);
exception when no_data_found then
dbms_output.put_line('No record found');
end;
Main program: ([Link])
declare
empno [Link]%type;
begin
empno := &empno;
p3(empno);
end;
Output:
SQL> set serverout on;
SQL> @ E:/[Link];
SQL> @ E:/[Link];
Enter value for empno: 22
old 7: empno:=&empno;
new 7: empno:=22;
Employee number: 22
Employee name: aaa
PL/SQL procedure successfully completed.
SQL> exec p2(20);
No record found
PL/SQL procedure successfully completed.
02. Create a procedure for a swapping program.
create or replace procedure swap(a in out number, b in out number) is
c number;
begin
c:=a;
a:=b;
b:=c;
end;
Calling procedure
declare
a number;
b number;
begin
a:=&a;
b:=&b;
dbms_output.put_line('Before swapping a = '||a||' b = '||b);
swap(a,b);
dbms_output.put_line('After swapping a = '||a||' b = '||b);
end;
Output:
Enter value for a: 3
old 5: a:=&a;
new 5: a:=3;
Enter value for b: 5
old 6: b:=&b;
new 6: b:=5;
Before swapping a = 3 b = 5
After swapping a = 5 b = 3
PL/SQL procedure successfully completed.
User Defined Function
01. Create a function for a factorial program
create or replace function factf( n number)
return number is
f number;
p number;
begin
f:=1;
for p in 1..n
loop
f:=f*p;
end loop;
return (f);
end;
Calling function
declare
n1 number;
n2 number;
r number;
begin
dbms_output.put_line('enter number');
n2:=&n1;
r:=factf(n2);
dbms_output.put_line(r);
end;
Output:
Enter value for n1: 4
old 7: n2:=&n1;
new 7: n2:=4;
enter number
24
PL/SQL procedure successfully completed.
Embedded SQL
import [Link].*;
class Samp1
{
public static void main(String argv[])
{
try
{
[Link] ("[Link]");
Connection con =
[Link]("jdbc:odbc:cc","scott","tiger");
Statement stmt = [Link]();
ResultSet rs = [Link]("SELECT * FROM emp");
while ([Link]())
{
[Link] (" Employee Number=" + [Link](1));
[Link] (" Employee Name=" + [Link](2));
[Link] (" Salary=" + [Link](3));
[Link](" \n");
}
[Link]();
[Link]();
}
catch ([Link] ex)
{
[Link]("Error :" +ex);
}
}
}
Output:-
Z:\>javac [Link]
Z:\>java Samp1
Employee Number=5655
Employee Name=kayalvizhi
Salary=25000
Employee Number=1234
Employee Name=keerthana
Salary=20000
Employee Number=1234
Employee Name=suganya
Salary=20000