ORACLE
Chapter 1 : Introduction
Structure query language (SQL), Is this set commends that all
programs and users must
use to access data within the oracle database.
Dr.E.F codd was published in June 1970.RDBMS-Relational Database
Management
System.
Chapter 2 : SQL
SQL Statements
Four
types
a.
DDL(Data Definition
Language)
b.
DML (Data
Manipulation Language)
c.
DCL (Data Control
Language)
d.
TPL (Transactions
Control Language)
DDL DML DCL TCL
Create select select commit
Alter insert grand rollback
Drop update revoke savepoint
Grant delete
Revoke lock table
Chapter 3: SQL*Plus
- SQL*Plus is Oracle's command-line interpreter.
- The `start' menu, SQL*Plus is listed under programs > oracle > application
- Development > SQL Plus.
- You will be prompted for your username and password.
- You can try to use scott for the username, and tiger for the password.
- You are now connected to a shared database, on which you have an account (called a
schema ).
Table :1
outlines the main Oracle SQL data types
Table 1: The main SQL data types.
|
||||||||||||||||||||||||
|
The NUMBER (p, s) type takes two arguments; precision and scale. The
precision of a
number its number of significant decimal digits its scale is the
number of digits after the
decimal point.
SQL Works
Ø Query in data .
Ø Inserting, updating,
deleting and rows in a table.
Ø Creating, replacing,
altering, and dropping objects.
Ø Controlling access to
the database and its objects.
Ø Guaranteeing database
consistency and integrity.
Chapter 4 : TABLE
Create table – [Table Name: empl]
create table empl(eno number(3),ename varchar2(8),DOB date,Basic
number(5),
hra number(4), namt number(5));
Table created.
Table View
desc empl
Name
Null? Type
-----------------------------------------
-------- ----------------------------
ENO
NUMBER(3)
ENAME VARCHAR2(8)
DOB
DATE
BASIC
NUMBER(5)
HRA
NUMBER(4)
NAMT
NUMBER(5)
Alter Table
Additional width changes(modify)
alter table empl modify(eno
number(5));
Table altered.
Table Show
desc empl;
Name
Null? Type
-----------------------------------------
-------- ----------------------------
ENO
NUMBER(5)
ENAME
VARCHAR2(8)
DOB
DATE
BASIC
NUMBER(5)
HRA
NUMBER(4)
NAMT
NUMBER(5)
Add Column
Alter Table empl add(grade
varchar2(2));
Table Altered.
Table show
desc empl;
Name Null? Type
-----------------------------------------
-------- ----------------------------
ENO
NUMBER(4)
ENAME
VARCHAR2(8)
DOB DATE
BASIC
NUMBER(5)
HRA
NUMBER(4)
NAMT
NUMBER(5)
GRADE VARCHAR2(2)
Create
Record- [Type-1]
insert into empl
values(&eno,'&ename','&dob',&basic,&hra,&namt,&grade);
Enter value for eno: 100
Enter value for ename: Scott
Enter value for dob: 17-oct-83
Enter value for basic: 5000
Enter value for hra: 500
Enter value for namt: 0
Enter value for grade: null
old 1: insert into empl
values(&eno,'&ename','&dob',&basic,&hra,&namt,&grade)
new 1: insert into empl
values(100,'Scott','17-oct-83',5000,500,0,null)
1 row created.
/
Enter value for eno: 101
Enter value for ename: adler
Enter value for dob: 12-jan-88
Enter value for basic: 6000
Enter value for hra: 600
Enter value for namt: 0
Enter value for grade: null
old 1: insert into empl
values(&eno ,’&ename','&dob',&basic,&hra,&namt,&grade)
new 1: insert into empl
values(101,'adler','12-jan-88',6000,600,0,null)
1 row created.
Create Record-
[Type-2]
insert into empl values(103,'sandy','14-may-78',7000,700,0,null);
1 row created.
Select a record
select * from empl;
ENO ENAME DOB BASIC HRA NAMT GR
---------- -------- --------- ---------- ---------- ---------- ----------------------------
100 Scott 17-OCT-83 5000 500 0
101 adler 12-JAN-88 6000
600 0
103 sandy 14-MAY-78 7000
700 0
Table Rename
create table old(ename char(10),sal number(5));
Table created.
create table new as (select * from old);
Table created.
desc new;
Name Null?
Type
-----------------------------------------
-------- -------
ENAME CHAR(10)
SAL NUMBER(5)
desc old;
Name Null? Type
-----------------------------------------
-------- -------
ENAME CHAR(10)
SAL NUMBER(5)
drop table old;
Table dropped.
Delete table
drop table empl;
Table dropped.
Delete Record
delete from empl where ename='sandy';
1 row deleted.
select * from empl;
ENO ENAME DOB BASIC HRA NAMT GR
---------- -------- --------- ---------- ---------- ---------- -------------------------
100 Scott 17-OCT-83 5000 500 0
101 adler 12-JAN-88 6000 600 0
Roll back &
Savepoint
delete from empl where
hra=600;
1 row deleted.
1.Savepoint
savepoint c;
Savepoint created.
select * from empl;
ENO ENAME DOB BASIC HRA NAMT GR
---------- --------
--------- ---------- ---------- ---------- --
100 Scott 17-OCT-83 5000 500 0
2. Roll back
roll back to c;
Rollback complete.
select * from empl;
ENO ENAME DOB BASIC HRA NAMT GR
---------- --------
--------- ---------- ---------- ---------- --
100 Scott 17-OCT-83 5000 500 0
101 adler 12-JAN-88 6000 600 0
Select Particular
Column
select ename,dob from empl;
ENAME DOB
-------- ---------
Scott 17-OCT-83
adler 12-JAN-88
Record Update
update empl set
ename='kumar' where eno=103;
1 row updated.
select * from empl;
ENO ENAME DOB BASIC HRA NAMT
GR
---------- -------- --------- ---------- ---------- ---------------------------------- --
100 Scott 17-OCT-83 5000 500 0
101 adler 12-JAN-88 6000 600 0
103 kumar 14-MAY-78 7000
700 0
Chapter 5:Where
clause
Common Comparison operators
a.
Operator (=)
select * from empl where
ename = 'sandy';
ENO ENAME DOB BASIC HRA NAMT GR
---------- --------
--------- ---------- ---------- ---------- --
103 sandy 14-MAY-78 7000 700 0
b.
Operator (! = (or) ^=
(or) <>)
select * from empl where
ename != 'sandy';
ENO ENAME DOB
BASIC HRA
NAMT GR
---------- --------
--------- ---------- ----------
---------- --
100 Scott 17-OCT-83 5000
500 0
101 adler 12-JAN-88
6000
600 0
102 ravi 27-JUL-07 4500 400 0
c.
Less than ( < )
select * from empl where
basic < 5000;
ENO ENAME
DOB BASIC HRA NAMT GR
---------- --------
--------- ---------- ---------- ---------- --
102 ravi 27-JUL-07 4500 400 0
d.
Greater than ( > )
select * from empl where
basic >5000;
ENO ENAME DOB
BASIC HRA
NAMT GR
---- ------ ------- --------- ---------- ---------- --
101 adler
12-JAN-88 6000
600 0
103 sandy
14-MAY-78 7000
700 0
e.
Less then or equal to
(<=)
select * from empl where
basic <=5000;
ENO ENAME DOB BASIC HRA NAMT GR
---------- --------
--------- ---------- ---------- ---------- -------------------
100 Scott 17-OCT-83 5000 500 0
102 ravi 27-JUL-07 4500 400 0
f.
Greater than or equal
to
select * from empl where
basic >= 5000;
ENO ENAME
DOB BASIC HRA NAMT GR
---------- --------
--------- ---------- ---------- ---------- ---------------
100 Scott 17-OCT-83 5000 500 0
101 adler 12-JAN-88 6000
600 0
103 sandy 14-MAY-78 7000 700 0
g.
In
select * from empl where
basic in (5000,7000);
ENO ENAME
DOB BASIC HRA
NAMT GR
---------- --------
--------- ---------- ---------- ---------- --
100 Scott
17-OCT-83 5000 500 0
103 sandy 14-MAY-78 7000
700 0
h.
Not in
select * from empl where
basic not in (5000,7000);
ENO ENAME
DOB BASIC HRA
NAMT GR
---- -------- --------- ---------- ---------- ---------- --
101 adler
12-JAN-88 6000 600 0
102 ravi
27-JUL-07 4500 400 0
i.
Between A and B
select * from empl where
hra between 100 and 500;
ENO ENAME DOB BASIC HRA NAMT GR
---------- --------
--------- ---------- ---------- ---------- --
100 Scott 17-OCT-83 5000 500 0
102 ravi 27-JUL-07 4500 400 0
j.
Not Between A and B
select * from empl where
hra between 100 and 500;
ENO ENAME
DOB BASIC HRA NAMT GR
---------- --------
--------- ---------- ---------- ---------- -----------------
100 Scott
17-OCT-83 5000
500 0
102 ravi
27-JUL-07 4500 400 0
k.
Like ‘%adler%’
select * from empl where
ename like '%adler%';
ENO ENAME DOB BASIC HRA NAMT GR
----- -------- --------- ---------- ---------- ---------- ----------------------
101 adler 12-JAN-88 6000 600 0
Order by
select * from empl order by dob desc,ename;
ENO ENAME DOB BASIC HRA
NAMT GR
-----------------------------------------------------------------------------------
101 adler 12-JAN-88 6000 600 0
100 Scott 17-OCT-83 5000 500 0
103 sandy 14-MAY-78 7000
700 0
Chapter 6: Functions
·
Group Functions
·
single Row function
Group function
single Row function
Count a. number
Sum b. char
Avg c. date
Max d. Misellances
Min
Group Functions
a. Count:
select count(eno)from empl;
COUNT(ENO)
------------------
2
b.Sum:
select sum(Basic)from empl;
SUM(BASIC)
-----------------
11000
c. Avg:
select avg(hra)from empl;
AVG(HRA)
-----------------
550
d. Max:
select max(basic) from
empl;
MAX(BASIC)
------------------
6000
e. Min:
select min(HRA)from empl;
MIN(HRA)
---------------
500
Single Row Function
Number Data Type
a. Addition (+)
select basic + hra from
empl;
BASIC+HRA
------------------
5500
6600
7700
b.
Subtraction (-)
select basic - hra from empl;
BASIC-HRA
------------------
4500
5400
6300
c.
Multiplication (*)
select basic * hra from empl;
BASIC*HRA
-----------------
2500000
3600000
4900000
d.
Division (/)
select basic /100 from
empl;
BASIC/100
--------------
50
60
70
Number function
a. Abs
select abs(-24)from dual;
ABS(-24)
------------
24
b. Ceil
select ceil(25.17)from dual;
CEIL(25.17)
-----------
26
c. Floor
select floor(16.8)from
dual;
FLOOR(16.8)
----------------
16
d. Mod
select mod(7,2)from dual;
MOD (7,2)
----------
1
e. Round
select round(25.7)from
dual;
ROUND(25.7)
-----------
26
f . Sqrt
select sqrt(25)from dual;
SQRT(25)
----------
5
g. Power
select power(2,3)from dual;
POWER(2,3)
----------
8
h. Sign:
select sign(12) from dual;
SIGN(12)
----------
1
Character Data Type
a. Concat
select concat('Sandy','Kumar')from dual;
CONCAT('
-------------
SandyKumar
b. Initcap
select initcap('computer')from dual;
INITCAP(
-------------
Computer
c. Length
select length('Shanthi')from dual;
LENGTH('SHANTHI')
----------------------------
7
d. lower
select lower('HEENA')from dual;
LOWER
-----------
Heena
E. Replace
select replace('Scott','S','Boy')from
dual;
REPLACE
-------
Boycott
6. Substr
select substr('WELCOME',2,3)from
dual;
SUB
---
ELC
7. Upper
select upper('welcome')from
dual;
UPPER('
-------
WELCOME
8.LTrim
select LTrim('dur ')from dual;
LTRIM('DUR')
------------
Dur
9.RTim
select RTrim(' dur')from dual;
RTRIM('DU
---------
Dur
10.LPad:
select LPAD('page1',15,'*')from
dual;
LPAD('PAGE1',15
---------------
**********page1
11. ASCII
select ascii('R')from dual;
ASCII('R')
----------
82
Common Function Date
Data Type
1.SYSdate
select sysdate from dual;
SYSDATE
---------
20-JUL-07
2.Last_day
select last_day(sysdate)from
dual;
LAST_DAY(
---------
31-JUL-07
3. Add months
select add_months(sysdate,2)from
dual;
ADD_MONTH
---------
20-SEP-07
4. Months_between
select months_between(sysdate,'12-mar-07')from
dual;
MONTHS_BETWEEN(SYSDATE,'12-MAR-07')
-----------------------------------
4.27143407
5. Next_day
select next_day(sysdate, 'monday')from
dual;
NEXT_DAY(
---------
23-JUL-07
Special format date data
type
1.Y or YY or YYY:
select
to_char(sysdate,'yyyy')from dual;
TO_C
----
2007
2. SYEAR or YEAR
select
to_char(sysdate,'SYEAR')from dual;
TO_CHAR(SYSDATE,'SYEAR')
-------------------------------------------
TWO THOUSAND SEVEN
3.Q:
select
to_char(sysdate,'Q')from dual;
T
-
3
4.MM:
select
to_char(sysdate,'mm')from dual;
TO
--
07
5.RM(Roman Numarical month)
select to_char(sysdate,'RM'
2 )from dual;
TO_C
----
VII
6.Month
select
to_char(sysdate,'month')from dual;
TO_CHAR(S
---------
July
7.WW(week of year)
select
to_char(sysdate,'WW')from dual;
TO
--
29
8.W(week of the month)
select
to_char(sysdate,'W')from dual;
T
-
3
9.DDD(day of the year)
select
to_char(sysdate,'DDD')from dual;
TO_
---
201
10.DD (day of the month)
select
to_char(sysdate,'DD')from dual;
TO
--
20
11.D (day of the week)
select
to_char(sysdate,'D')from dual;
T
-
6
12.DY(abbreviated name of the day)
select
to_char(sysdate,'DY')from dual;
TO_
---
FRI
13.HH or HH12(hour of day)
select to_char(sysdate,'HH')from
dual;
TO
--
11
select to_char(sysdate,'HH12')from dual
TO
--
11
14.HH24(hour of day using)
select
to_char(sysdate,'HH24')from dual
TO
--
11
15.MI(minutes)
select
to_char(sysdate,'MI')from dual;
TO
--
06
16.SS(seconds)
select
to_char(sysdate,'SS')from dual;
TO
--
48
Converting from one column type to another
1.To char
select to_char (8897) from
dual;
TO_C
----
8897
2. To number
select to_number ('8897')
from dual;
TO_NUMBER('8897')
-----------------
8897
3. To_date
select
to_date('20-jul-07')from dual;
TO_DATE('
---------
20-JUL-07
Chapter 7: Sub query
select * from empl;
ENO ENAME DOB BASIC HRA NAMT GR
----- -------- --------- ---------- ---------- ---------- ----------------------
100 Scott
17-OCT-83 5000 500 0
101 adler
12-JAN-88 6000 600 0
103 sandy
14-MAY-78 7000 700 0
102 ravi
27-JUL-07 4500
400 0
104 geetha
22-SEP-83 4500
200 0
105 geetha
13-AUG-91 5000 300 0
106 adlerk
28-JUN-87 6500 400 0
In :
select * from empl where
eno in (select eno from empl where eno=101);
ENO ENAME
DOB BASIC
HRA NAMT GR
---------- --------
--------- ---------- ---------- ---------- ---------------------
101 adler 12-JAN-88 6000
600 0
Not in
select * from empl where
eno not in (select eno from empl where eno=101);
ENO ENAME DOB BASIC HRA NAMT GR
---- -------- ---------
---------- ---------- ---------- -------------------------
100 Scott 17-OCT-83 5000 500 0
103 sandy 14-MAY-78 7000 700 0
102 ravi 27-JUL-07 4500 400 0
104 geetha 22-SEP-83 4500
200 0
105 geetha 13-AUG-91
5000
300 0
106 adlerk 28-JUN-87 6500
400 0
Greater than
select * from empl where basic > (select basic from empl where
ename='adler');
ENO ENAME
DOB BASIC HRA NAMT GR
----- -------- --------- ---------- ---------- ---------- ------------------------
103 sandy
14-MAY-78 7000 700
0
106 adlerk
28-JUN-87 6500 400
0
Greater than or equal to
select * from empl where basic >=(select basic from empl where
ename='adler');
ENO ENAME
DOB BASIC HRA NAMT GR
----- -------- --------- ---------- ---------- ---------- -------------------------
101 adler
12-JAN-88 6000 600 0
103 sandy
14-MAY-78 7000 700 0
106 adlerk
28-JUN-87 6500 400 0
Less than
select * from empl where basic < (select basic from empl where
basic=6000);
ENO ENAME
DOB BASIC HRA NAMT GR
------ -------- --------- ---------- ---------- ---------- ---------------------------
100 Scott
17-OCT-83 5000 500
0
102 ravi
27-JUL-07 4500 400
0
104 geetha
22-SEP-83 4500 200
0
105 geetha
13-AUG-91 5000 300
0
Less than or equal to
select * from empl where
basic <= (select basic from empl where basic=6000);
ENO ENAME DOB BASIC HRA
NAMT GR
------ -------- ---------
---------- ---------- ---------- ----------------------
100 Scott 17-OCT-83
5000 500 0
101 adler 12-JAN-88 6000
600 0
102 ravi 27-JUL-07 4500 400 0
104 geetha 22-SEP-83 4500 200 0
105 geetha 13-AUG-91 5000
300 0
Update condition
update emp1 set
sal=sal*1.15 where job='clerk' and deptno=40;
1 row updated.
select * from emp1;
EMPNO ENAME JOB
MGR HDATE SAL
DEPTNO CITY PHONE
----------------------------------------------------------------------------------------------------------
100 john manager 1207 05-JAN-07 5000 10
102 mohan clerk 1980 17-JUL-07 3000 20
103 shan Gm 4576 21-JUN-07 7000 30
EMPNO ENAME JOB MGR HDATE SAL DEPTNO CITY
PHONE
-------------------------------------------------------------------------------------------------------------------------------
104 guna Am 5689 12-JAN-07 6500 40 7 34566
104 badler clerk 2345 12-JAN-85 3450 40
105 shan Manager
45 23-JUL-87 6500 20 3 234563
Excises:
Create table salary:
Field:eno,ename,date,dest,deptno,loc,basic,hra,pf,da,loan,net
Insert 12 records
- calculate net salary
- find out the employees with the same job as name(eg:Ravi)
- List all the employees who earn more than all employees in sales department?
- List the employees with either the same job in all departments?
- List the employee in dept with the same job as anyone working in Chennai
- Calculate how many members greater than 10000 salary and list out details.
- Update to basic field increment RS. 500 in below 10000 salaries.
Chapter 8: Set of
operators
Joins & subquries
Union
Union all
Intersect
Minus
|
|
||||
Union
Two output queries merge(duplicate
elements discard)
select deptno from dept union
select deptno from cust;
DEPTNO
----------
10
20
30
40
50
Union all
Duplicate elements display
select deptno from dept union
all select deptno from cust;
DEPTNO
----------
10
20
30
10
20
30
Intersect
Common values display.
select deptno from dept intersect select deptno from cust;
DEPTNO
----------
10
20
30
Minus
[Different values display] Minus
operators return all distinct rows. Selected only by first query and not by
second query.
select deptno from dept minus select deptno from cust;
DEPTNO
----------
40
Chapter 9: Join Two Tables
Joining two tables
together
Two table’s values
displayed.
To define relationship between multiple table and with in a single
command.
|
|
Create Object
Object –Redselect red .deptno,blue .deptno from dept red,cust blue
where blue .deptno=red.deptno;
DEPTNO DEPTNO
---------- ----------
10 10
20 20
30 30
40 40
Chapter 10 Types of Joins
Simple join--- a. Equi join & Non equi join
b. Outer join
c. Self Join
Equi join:
select * from z;
AGE DNO
---------- ----------
16 10
18 20
21 30
15 40
select * from x;
NO
NAME DNO
----------
-------- ----------
100 sandy 10
101 deepa 20
102 badler 30
104 kalai 50
select x1.dno,name,age,z1.dno from x x1,z z1 where x1.dno=z1.dno;
DNO NAME
AGE DNO
---------- --------
---------- ----------
10 sandy 16 10
20 deepa 18 20
30 badler 21 30
Non Equi join
Outer Join
(+) operator can appear
only in the where cause, and can be applied only to a column of a table or view.
select x1.dno,name,z1.dno from x x1,y z1 where x1.dno(+)=z1.dno;
DNO NAME DNO
---------- --------
----------
10
20 deepa 20
20 heena 20
20 deepa 20
20 heena 20
30 badler 30
40
Self Join
Type of join where the join operation takes place in the same
table.
select s.name ||'works fro' || z.dname from x s ,y z;
S.NAME||'WORKSFRO'||Z.DNAME
---------------------------
sandyworks fromanager
deepaworks fromanager
badlerworks fromanager
adlerworks fromanager
vijworks fromanager
kalaiworks fromanager
heenaworks fromanager
sandyworks froclerk
deepaworks froclerk
badlerworks froclerk
adlerworks froclerk
Chapter 11
Views, Synonyms
Views :( an Exiting
table copy of fields)
A view is a subset of data one or more table.
create view em as select name,dno from x;
View created.
select * from em;
NAME DNO
-------- ----------
deepa 20
badler 30
adler 60
vij 34
kalai 50
heena 20
6 rows selected.
insert into em
values('mohan',10);
1 row inserted.
Synonyms
Synonym is a data base
object. That is used as an alias name
for any object.
Advantages:
·
Simplify SQL statements
·
Hide the read identify of an object.
·
Are useful in database links.
create synonym a2 for x;
Synonym created.
select * from a2;
NO NAME
DNO
------- -------- ----------
101 deepa
20
102 badler 30
adler 60
3 vij 34
104 kalai 50
105 heena
20
mohan 10
7 rows selected.
Sequences
Sequence are a set of data base object which can generate
sequential integer values.
create sequence aa // aa-sequence name
2 start with 2 //
starting number
3 minvalue 1 //
for loop initialize
4 increment by 1 // increment value
5 maxvalue 10 //maximum
value up to 10
6 cycle //Looping
7 cache 5; //Memory
Allocation (i.e) 5 records must be kept access
Fast
Sequence created.
select aa.nextval from dual;
NEXTVAL
----------
2
/
NEXTVAL
----------
3
:
:
/
NEXTVAL
----------
1
insert into
x(no,name,dno)values(aa.nextval,'meena',56);
1 row created.
select * from x;
NO NAME DNO
---------- -------- ----------------
5 meena 56
101 deepa 20
102 badler 30
adler 60
3 vij
34
104 kalai 50
105 heena 20
mohan 10
2 meena 56
9 rows selected.
Clusters
Cluster are an
optional method of storing table data
create cluster clum(dno
number(3));
Cluster created.
create index red on
cluster clum;
Index created.
create table m1(dno
number(3),name varchar2(6)) cluster clum(dno);
Table created.
create table n(dno
number(3),age number(5))cluster clum(dno);
Table created.
select rowid from cluster clum;
|
|
ROWID
------------------
AAAGFjAABAAAIV0AAA
AAAGFjAABAAAIV1AAA
AAAGFjAABAAAIV2AAA
AAAGFjAABAAAIV3AAA
AAAGFjAABAAAIV4AAA
select * from cluster clum;
DNO
----------
10
20
30
40
50
Chapter 10
Locking
Oracle
automatically locks the resources on behalf of the transaction
1.
Row level lock
2.
Table level lock
Row level lock
select * from x where
no='100' for update of dno;
NO NAME DNO
------- --------
----------
100 ar
43
Table level lock
lock table x share update
mode;
Table(s) Locked.
Chapter 11
Oracle partitioning
Partition is introduced
in oracle. It is very fast.
Create table sales (oid number,oamt
number(6,2))partition by range(oid)(partition p1
values less
than(100),partition p2 values less than(200)));
Table created.
insert into sales
values(&oid,&oamt);
Enter value for oid: 103
Enter value for oamt: 300
old 1: insert into sales
values(&oid,&oamt)
new 1: insert into sales
values(103,300)
1 row created.
/
Enter value for oid: 40
Enter value for oamt: 250
old 1: insert into sales
values(&oid,&oamt)
new 1: insert into sales
values(40,250)
1 row created.
select * from sales;
OID OAMT
---------- ----------
40 250
60 270
103 300
120 180
select * from sales partition(p1);
OID OAMT
---------- ----------
40 250
60 270
select * from sales
partition(p2);
OID OAMT
---------- ----------
103 300
120 180
Collection of arrays
A collection is an order group of elements of the same data type.
An element can be
determined by its unique subscript.
- Varray
create or Replace type b1
as VArray(5) of number(3);
2 /
Type created.
create table pen(pno
number,rate b1);
Table created.
insert into pen values(2,b1(34,56,87,65));
1 row created.
insert into pen
values(1,b1(23,45,65,32));
1 row created.
select * from pen;
PNO
----------
RATE
-----------------------------------------------------------------
2
B1(34, 56, 87, 65)
1
B1(23, 45, 65, 32)
Error
insert into pen
values(4,b1(34,56,87,65,52,32));
insert into pen
values(4,b1(34,56,87,65,52,32))
*
ERROR at line 1:
ORA-22909: exceeded maximum VARRAY limit
Chapter 12
PL-SQL
PL-SQL is a block structured language. The basic unit of pl-SQL is
called a block which
contains declarative statements. Executable statements and error
handling statements. The
blocks can be nested in one or more blocks.
1. Declarative
2. Executable
3. error handling
syntax:
[< Block header>]
[ declare
< Constants>
< Variables>
< Cursors>
< User defined
exceptions>]
Begin
<PL/ SQL statements>
[ exception< Exception handling>]
end;
- Welcome statements
begin
2 dbms_output.put_line('Welcome');
3 end;
4 /
PL/SQL procedure successfully completed.
set serveroutput on;
/
Welcome
PL/SQL procedure successfully completed.
Lab Exercises
- print in your address
- print 5 countries name
2.
declare
2 s number default 10;
3 begin
4 dbms_output.put_line(s);
5 s:=20;
6 dbms_output.put_line(s);
7 end;
8 /
output:
10
20
PL/SQL procedure successfully completed.
3. Print the output
declare
2 x number;
3 begin
4 x:=35;
5 dbms_output.put_line(x);
6 end;
7 /
35
PL/SQL procedure successfully completed.
1. Enter the input
declare
2 x number;
3 begin
4 x:=&x;
5 dbms_output.put_line(x);
6 end;
7 /
Enter value for x: 24
old 4: x:=&x;
new 4: x:=24;
24
PL/SQL procedure successfully completed.
Lab Exercises
- Enter student marks (min 5 marks).
2. Add two numbers
declare
2 x number;
3 y number;
4 begin
5 x:=&x;
6
y:=&y;
7
dbms_output.put_line(x+y);
8 end;
9 /
Enter value for x: 20
old 12: &x;
new 12: 20;
Enter value for y: 10
old 13: y:=&y;
new 13: y:=10;
30
PL/SQL procedure successfully completed.
Lab Exercises
- Find out c values c=a+b,
c=a-b,
c=a*b,
c=a/b ?
- calculate area?
- calculate l* b*h?
- calculate z=p*q - r + s / t *u ?
- calculate student marksheet,(tot,avg) ?
3.
|
declare
2 s
number;
3 begin
4 s:=&s;
5 if s>0 then
6 dbms_output.put_line('The number is
positive');
7 end if;
8 end;
9 /
Enter value for s: 36
old 4: s:=&s;
new 4: s:=36;
The number is positive
|
PL/SQL procedure successfully completed.
4. If…then …else
condition
declare
2 s number;
3 begin
4 s:=&s;
5 if s>0 then
6 dbms_output.put_line('The number is
positive');
7 else
8 dbms_output.put_line('The number is
negative');
9 end if;
10 end;
11 /
Enter value for s: -23
old 4: s:=&s;
new 4: s:=-23;
The number is negative
PL/SQL procedure successfully completed.
Lab Exercises
- Find out the values greatest 2 numbers.
2. Create Mark Sheet? How to calculate the
Total, Average, Result, Grade?
Chapter 13
Iterative control
- loop
- while
- for loop
Loop
declare
2 a number:=&a;
3 begin
|
5 dbms_output.put_line(a);
6 a:=a+1;
7 if a>10 then
8 exit;
9 end if;
10 end loop;
11 end;
12 /
Enter value for a: 2
old 2: a number:=&a;
new 2: a number:=2;
2
3
4
5
6
7
8
9
10
PL/SQL procedure successfully completed.
Lab Exercises
- Calculate 1+2+3….n;
- Calculate square of 1+2+3….n;
While loop
declare
|
3 y integer:=0;
4 begin
5 while x<=5
6 loop
7 y:=y+x;
8 x:=x+1;
9 end loop;
10 dbms_output.put_line(y);
11 end;
12 /
15
PL/SQL procedure successfully completed.
FOR LOOP:
declare
2 x number :=50;
3 begin
4 dbms_output.put_line(x);
5 for x in 2..5 loop
6 dbms_output.put_line(x);
7 end loop;
8 dbms_output.put_line(x);
9 end;
10 /
50
2
3
4
5
50
PL/SQL procedure successfully completed.
Chapter 14
Run
Set serveroutput on;
/
|
PL-SQL uses cursor for management of SQL select statement.
Cursor are chunks of memory allocated to process these statements
Type of cursors
- implement cursor
- Explicit cursor
Implement cursor
When the executable part of PL/SQL block issues a SQL command,
PL/SQL create an implicit cursor which has the identifier SQL,PL/SQL manages
this cursors.
Explicit cursor
The query is executed and the returned rows are manipulated within
the cursor. Explicit cursor can be of two type.
- static cursor
- dynamic cursors.
static cursor
static cursor or a type of
cursors when the select statements given at compile time itself.
dynamic cursors
dynamic cursors or the name suggests or a set of cursor where the
records from the tables are selected at
run time rather then compile time.
Attributes
- %Row count –the attribute yields the number of rows affected by an INSERT,UPDATE, OR
DELETE statements, or return by a SELECT into command.
- %Found- this attributes yields TRUE if ands INSERT,UPDATE, or DELETE statements
Affected
one or more rows or SELECT INTO statement returned one or more rows.
Otherwise
it false.
- %NotFound- This attributes is the logical opposite of %found. it yields true if and
INSERT, UPDATE, OR DELETE
statements affected no rows, are a select
Into statement return no rows otherwise it yields false.
- % Isopen- this attributes always yields FALSE because closes the SQL cursor automatically after executing is associated SQL statements.
Example 1:
declare
2 n number(5);
|
4 delete emp1 where empno=103;
5 if sql%found then
6 dbms_output.put_line('Record deleted');
7 else
8 dbms_output.put_line('no matching rows');
9 end if;
10 end;
11 /
PL/SQL procedure successfully completed.
Cursor using for loop
declare
2 cursor c1 is select ename,sal from emp;
3 begin
4 for i in c1
5 loop
6 insert into final values(i.ename,i.sal); //final (table name) using two
parameters.
7 end
loop; name,salary.
8 end;
9 /
PL/SQL procedure successfully completed.
select * from final;
NAME SALARY
-------- ----------
badler 4000
heena 5000
SMITH 800
ALLEN 1600
WARD 1250
JONES 2975
MARTIN 1250
BLAKE 2850
CLARK 2450
SCOTT 3000
KING 5000
NAME SALARY
-------- ----------
TURNER 1500
ADAMS 1100
JAMES 950
FORD 3000
MILLER 1300
Cursor using Attributes
declare
2 cursor c1 is select ename,job from emp;
3 mname varchar2(10);
4 njob varchar2(12);
5 begin
6 open c1;
7 loop
8 fetch c1 into mname,njob;
9 exit when c1 %notfound;
10 dbms_output.put_line(mname ||' welcome
'||njob);
11 end loop;
12 close c1;
13 end;
14 /
SMITH welcome CLERK
ALLEN welcome SALESMAN
WARD welcome SALESMAN
JONES welcome MANAGER
MARTIN welcome SALESMAN
BLAKE welcome MANAGER
CLARK welcome MANAGER
SCOTT welcome ANALYST
KING welcome PRESIDENT
TURNER welcome SALESMAN
ADAMS welcome CLERK
JAMES welcome CLERK
FORD welcome ANALYST
MILLER welcome CLERK
PL/SQL procedure successfully completed.
Chapter 15
Composite data type
declare
type tree is record(a
varchar2(10),b number);
red tree;
cursor c1 is select
pname,pcode from product;
begin
open c1;
loop
fetch c1 into red;
exit when c1 %notfound;
dbms_output.put_line(red.a ||'is a'||red.b);
end loop;
close c1;
end ;
/
honeyis a10
riceis a20
luxis a15
PL/SQL procedure successfully completed.
Chapter 16
Exception
An error is an up normal
condition that arises during the exception of a program. Errors arise from
design faults, Mistakes, hardware failures and other sources.
3 types
1. Predefined exception
2. user defined exception
3. un defined exception
1. Predefined exception
- Access_into_null
- Collection _is_null
- Cursor _Already_open
- Dup_val_on_index
- Invalid_cursor
- Invalid_number
- Login _denied
- No_data_found
- Program_error
- Too_many_rows
- Value_error
- Zero_divide
Error program
declare
2 x number:=&x;
3 y number:=&y;
4 begin
5 dbms_output.put_line('Results'||x/y);
6 end;
7 /
set serveroutput on;
/
Enter value for x: 7
old 2: x number:=&x;
new 2: x number:=7;
Enter value for y: 0
old 3: y number:=&y;
new 3: y number:=0;
declare
*
ERROR at line 1:
ORA-01476: divisor is equal to zero
ORA-06512: at line 5
Error Avoid Program
declare
2 x number:=&x;
3 y number:=&y;
4 begin
5 dbms_output.put_line('Results'||x/y);
6 exception
7 when Zero_divide then
8 dbms_output.put_line('Value is divided by
zero');
9 end;
10 /
Enter value for x: 7
old 2: x number:=&x;
new 2: x number:=7;
Enter value for y: 0
old 3: y number:=&y;
new 3: y number:=0;
Value is divided by zero
PL/SQL procedure successfully completed.
Chapter 17
Procedures and Functions
PL/ SQL provide sophisticated language
constructs to program procedures and functions as stand- alone PL/ SQL blocks.
They can be called from other PL/ SQL blocks, other procedures and functions. The syntax for a procedure
create[ or replace] procedure< procedure name>[(< list of
parameters>)] is
< declarations>
Begin
< sequence of statements>
[ exception< exception handling routines>]
End [< procedure name>];
Example for procedure1:
create or replace procedure disp_ename(eno in number)is mname varchar2(20);
begin
select name into mname from x where dno=eno;
dbms_output.put_line('the name is'||mname);
end;
/
Procedure created.
exec disp_ename(29);
the name isarun
PL/SQL procedure successfully completed.
Example for procedure
2:
declare
2 a varchar2(100):='hello';
3 b varchar2(100);
4 procedure red(a in varchar2,b out varchar2)as
5 begin
6 b:=a||'+ '||a;
7 exception
8 when value_error then
9 dbms_output.put_line('wrong');
10 end;
11 begin
12 red(a,b);
13 dbms_output.put_line(a ||'-'||b);
14 end;
15 /
hello-hello+hello
PL/SQL procedure successfully completed.
Create new table:
create table polic(eid
number(3),ename varchar2(13),age number(2),dest varchar2(6),
2 doj date,salary number(6),expe
number(2),awards varchar2(12));
Table created.
desc polic
Name
Null? Type
-----------------------------------------
-------- ----------------------------
EID NUMBER(3)
ENAME
VARCHAR2(13)
AGE NUMBER(2)
DEST
VARCHAR2(6)
DOJ DATE
SALARY
NUMBER(6)
EXPE
NUMBER(2)
AWARDS
VARCHAR2(12)
Create a procedure
Insert
create or replace procedure
inst is
2 eid number(3);
3 ename varchar2(13);
4 age number(2);
5 dest varchar2(6);
6 doj date;
7 salary number(6);
8 expe number(2);
9 awards varchar2(12);
10 begin
11 insert into polic
values(&eno,'&ename',&age,'&dest','&doj',&salary,&expe,'&awards');
12 end;
13 /
Enter value for eno: 1
Enter value for ename: ganash
Enter value for age: 30
Enter value for dest: sp
Enter value for doj: 12-jan-02
Enter value for salary: 8000
Enter value for expe: 6
Enter value for awards: anna
old 11: insert into polic
values(&eno,'&ename',&age,'&dest','&doj',&salary,&expe,'&awards');
new 11: insert into polic
values(1,'ganash',30,'sp','12-jan-02',8000,6,'anna');
Procedure created.
/
Enter value for eno: 2
Enter value for ename: veena
Enter value for age: 29
Enter value for dest: pc
Enter value for doj: 22-mar-98
Enter value for salary: 9000
Enter value for expe: 7
Enter value for awards: chiefminster
old 11: insert into polic
values(&eno,'&ename',&age,'&dest','&doj',&salary,&expe,'&awards');
new 11: insert into polic
values(2,'veena',29,'pc','22-mar-98',9000,7,'chiefminster');
Procedure created.
Create a procedure
display
create or replace procedure
disp is
2 name1 varchar2(15);
3 ag1 number(2);
4 dest1 varchar2(6);
5 doj1 date;
6 sal1 number(5);
7 expe1 number(2);
8 award varchar2(12);
9 a number(3):=&a;
10 begin
11 select ename into name1 from polic where
eid=a;
12 select age into ag1 from polic where eid=a;
13 select dest into dest1 from polic where eid=a;
14 select doj into doj1 from polic where eid=a;
15 select salary into sal1 from polic where eid=a;
16 select expe into expe1 from polic where eid=a;
17 select awards into award from polic where eid=a;
18 dbms_output.put_line('the name is:'||name1);
19 dbms_output.put_line('the age is:'||ag1);
20 dbms_output.put_line('the dest is:'||dest1);
21 dbms_output.put_line('the doj is:'||doj1);
22 dbms_output.put_line('the salary
is:'||sal1);
23 dbms_output.put_line('the expe is:'||expe1);
24 dbms_output.put_line('the awards
is:'||award);
25 end;
26 /
Enter value for a: 1
old 9: a
number(3):=&a;
new 9: a number(3):=1;
Procedure created.
A function can be
specified in an
create[ or replace] function< function name>[(< list of parameters>)]
return< data type> is
declare
2 function square(a number)
3 return number as b number;
4 begin
5 b:=a*a;
6 return b;
7 end;
8 begin
9 dbms_output.put_line(square(10));
10 end;
11 /
100
PL/SQL procedure successfully completed.
A procedure can be
deleted
Syntax :
drop procedure< procedure name>
( drop function< function name>).
Package
A package is a
database object that groups logically related PL/SQL types, objects, and
subprograms.
Packages usually have
two parts,
- A specification
- A body
Although sometimes the body is unnecessary.
The specification is the interface to your applications; it declares the
types, variables, constants, exceptions, cursors, and subprograms available for
use.
Syntax:
CREATE PACKAGE name AS --
specification (visible part)
-- public type and object
declarations
-- subprogram
specifications
END [name];
CREATE PACKAGE BODY name AS
-- body (hidden part)
-- private type and
object declarations
-- subprogram bodies
[BEGIN
-- initialization
statements]
END [name];
To create packages and store them permanently
in an Oracle database, you use the CREATE PACKAGE and CREATE PACKAGE BODY statements,
which you can execute interactively from SQL*Plus or Server Manager.
Advantages of Packages
Packages offer
several advantages: modularity, easier application design, information hiding,
added functionality, and better performance.
CREATE PACKAGE app1 as
2 TYPE EmpRecTyp IS RECORD (emp_id INTEGER,
salary REAL);
3 CURSOR desc_salary RETURN EmpRecTyp;
4 PROCEDURE hire_employee (empno number,
5 ename
VARCHAR2,
6 job
VARCHAR2,
7 mgr
NUMBER,
8 sal
NUMBER,
9 comm
NUMBER,
10 deptno NUMBER);
11 end app1;
12 /
Package created.
create or replace package body app1 as
2 CURSOR desc_salary RETURN EmpRecTyp IS
3 SELECT empno, sal FROM emp ORDER BY
sal DESC;
4 PROCEDURE hire_employee (empno number,
5 ename
VARCHAR2,
6 job
VARCHAR2,
7 mgr
NUMBER,
8 sal
NUMBER,
9 comm
NUMBER,
10 deptno NUMBER) IS
11 BEGIN
12 INSERT INTO emp VALUES (empno,ename,
job,
13 mgr, SYSDATE, sal, comm, deptno);
14 END hire_employee;
15 end app1;
16 /
Package body created.
Package is executed
EXECUTE
app1.hire_employee(121,'malar','clerk',870,2000,67,10);
PL/SQL procedure successfully completed.
select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ----------
----------
DEPTNO
----------
7369 SMITH CLERK 7902 17-DEC-80 800
20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300
30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500
30
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ----------
----------
DEPTNO
----------
7566 JONES MANAGER 7839 02-APR-81 2975
20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400
30
7698 BLAKE MANAGER 7839 01-MAY-81 2850
30
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ----------
----------
DEPTNO
----------
7782 CLARK MANAGER 7839 09-JUN-81 2450
10
7788 SCOTT ANALYST 7566 19-APR-87 3000
20
7839 KING PRESIDENT 17-NOV-81 5000
10
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ----------
----------
DEPTNO
----------
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0
30
7876 ADAMS CLERK 7788 23-MAY-87 1100
20
7900 JAMES CLERK 7698 03-DEC-81 950
30
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ----------
----------
DEPTNO
----------
7902 FORD ANALYST 7566 03-DEC-81 3000
20
7934 MILLER CLERK 7782 23-JAN-82 1300
10
121 malar clerk 870 09-AUG-07 2000
67
10
15 rows selected.
Delete a package
drop package app1;
Package dropped.
Trigger
A database trigger is stored PL/SQL block. That is associated with
a table .triggers are automatically executed when a specified SQL statement is
issued against a table.
Triggers are mainly following purpose:
- To automatically generate a values.
- To provide auditing.
Types of triggers
Before or After
select * from z;
no rows selected
SQL> desc z;
Name Null?
Type
-----------------------------------------
-------- ----------------------------
AGE
NUMBER(3)
DNO
NUMBER(4)
insert into z
values(29,75);
1 row created.
create or replace trigger
red before insert on z
2 begin
3 dbms_output.put_line('inserting record');
4 end;
5 /
Trigger created.
insert into z values(52,90);
inserting record
1 row created.
Check Constraints
Often columns in a table must have values that are within a
certain range or that satisfy certain conditions.
The syntax for a check
constraint is
[constraint< name>]check(< condition>)
If a check constraint is specified as a column constraint, the
condition can only refer that column.
EXAMPLE 1: you enter name field values only uppercase letters
SQL> create table samp(ename varchar2(16)constraint check_name
check(ename=upper(ename)));
Table created.
// input is wrong
insert into samp
values('&ename');
Enter value for ename: jaya
old 1: insert into samp
values('&ename')
new 1: insert into samp
values('jaya')
insert into samp values('jaya')
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.CHECK_NAME) violated
// input is correct
insert into samp values('ANAND');
1 row created.
EXAMPLE 2:
you enter sal field
values minimum 500 .
you enter deptno field values
between 10 to 100 .
create table samp1(sal
number(5,2)constraint check_sal check(sal>=500),deptno number(3)
2 constraint check_deptno check(deptno between
10 and 100));
Table created.
number( o, d): Numeric data type for integers and reals.
o = overall number of
digits,
d = number of digits to the
right of the decimal point.
Examples: number( 8), number( 5,2)
Note that,e. g.,number(
5,2) cannot contain anything larger than 999.99 without resulting in an error.
Data types derived from number are int[ eger], dec[ imal], smallint and real.
//Error
insert into samp1
values(4000,60);
insert into samp1 values(4000,60)
*
ERROR at line 1:
ORA-01438: value larger than specified precision allows for this
column
//Error
SQL> insert into samp1 values(400,150);
insert into samp1 values(400,150)
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.CHECK_DEPTNO) violated
Correct statements
insert into samp1
values(600,60);
1 row created.
Foreign Key
Constraints
A foreign key constraint( or referential integrity constraint) can
be specified as a column constraint or as a table constraint:
[ constraint< name>][ foreign key(<column( s)>)]
references<table>[(<column( s)>)]
[on delete cascade]
This constraint specifies a
column or a list of columns as a foreign key of the referencing table. The
referencing table is called the child- table, and the referenced table is
called the parent- table.
create table emp1(EMPNO
number(4)constraint pk_emp1 primary key,ename varchar2(10),
2 deptno number(3));
Table created.
desc emp1;
Name
Null? Type
-----------------------------------------
-------- ----------------------------
EMPNO NOT NULL
NUMBER(4)
ENAME
VARCHAR2(10)
DEPTNO
NUMBER(3)
/
Enter value for empno: 101
Enter value for ename: sandyu
Enter value for deptno: 20
old 1: insert into emp1
values(&empno,'&ename',&deptno)
new 1: insert into emp1
values(101,'sandyu',20)
1 row created.
/
.
.
/ /// Error data because using primary key. Avoid duplicate values.
Enter value for empno: 101
Enter value for ename: feena
Enter value for deptno: 50
old 1: insert into emp1
values(&empno,'&ename',&deptno)
new 1: insert into emp1
values(101,'feena',50)
insert into emp1 values(101,'feena',50)
*
ERROR at line 1:
ORA-00001: unique constraint (SCOTT.PK_EMP1) violated
SQL> select * from emp1;
EMPNO ENAME DEPTNO
---------- ---------- ----------
100 kalai 10
101 sandyu 20
102 mani 30
103 heena 40
Oracle
No comments:
Post a Comment