Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 87

what is o.s?

-> it is a collection of softwares, working together.

ex: windows,unix,linux

Types of o.s:

-> o.s are classified into 4 types

1. CUI (Character User Interface):

ex: MS-DOS, UNIX

2. GUI(Graphical User Interface):

ex: windows family, linux

3. Single User O.S:

-> this o.s can support only single user.

ex: Windows 93,95

4. multi user o.s:

-> this o.s can supports multiple users.

ex: windows xp, 2000 server, vista,linux,unix

Generations:

1946-55 -> Ist generation computers

-> machine level languages(0,1)

1956-65

-> assembly level language(middle level language)

-> in this language program consists neumonic codes

store a 10
add a b; a=a+b;

assembler(compiler) : it converts middle level language program into


machine understandable language.

1966-75 -> 3rd generation

-> High level language(user friendly language)

a=10;
c=a+b;

compilers:
1. compiler -> it converts entire program at a time .
2. interpreter -> it convets step by step

ex: C,C++,COBOL,BASIC,PASCAL,FORTRAN

1976-85 -> IVth Generation

-> non-procedural languages

ex: SQL

1986-Vth generation computers

-> platform independent languages are developed.

ex: JAVA, ORACLE

File :

-> IT IS COLLETION OF INFORMATION STORED IN BYTES/CHARACTERS.


-> IT IS MANAGED BY FILE SYSTEM.

DIS ADVANTAGES :

-> IT DOESN'T SUPPORT DATATYPE.


10 AAAA 10000
20 BBBB 20000
.
10000
-> IT DOESN'T SUUPPORT EXCEPTIONS
-> DATA RETRIEVAL AND MANIPULATION IS VERY SLOW.

DBMS:

-> IT IS A COLLECTION OF RELATED AND MEANING INFORMATION STORED AT


CENTRALLY ONE LOCATION(SERVER).
-> IT IS MANAGED BY DBMS
-> IT HAS 3 MODELS

1. H.M:

-> IN THIS MODEL DATA STORED IN INVERTED TREE FORMAT.


-> DATA RETRIEVAL AND MANIPULATION IS VERY FAST.

DIS ADV. :
-> DATA REDUNDANCY(DUPLICATION OF DATA)
\
P
M1 M2 M3
T1 T2 T2 T3 T3 T4
T5

2. PHYSICAL/NETWORK MODEL:
-> IN THIS MODEL DATA STORES THROUGH PHYSICAL LINK.
-> DATA RETRIEVAL AND MANIPULATION IS VERY FAST.

P
M1 M2 M3
T1 T2------------ T3 T4--------------- T5 T6 T7
3. RDBMS :
-> IN THIS MODEL DATA STORED IN ROWS AND COLUMNS FORMAT.
-> INTERSECTION OF ROW AND COLUMN GIVES A SINGLE VALUE.
-> IT SUPPORTS DATATYPES.
-> IT SUPPORTS EXCEPTION HANDLING
-> IT SUPPORTS INTEGRITY RULES.
-> NO DATA REDUNDANCY LIKE HDBMS
-> NO PHYSICAL LINK LIKE NDBMS.
-> RELATIONS ARE MAINTAINED LOGICALLLY.
-> IT SUPPORTS MUL-TIPLE USERS AND MULTIPLE PLOTFORMS
-> TO SHARE DATA BETWEEN USERS AND DIFFERENT APPLICATION S/W TOOLS.

-> DATA RETRIEVAL AND MANIPULATIONS IS VERY FAST(10 -9) NANO SEC.

EX: ORACLE, SQL-SERVER,SYBASE,DB2,TERADATA,etc.,

WHATS THE DIFFERENCES BETWEEN DBMS AND RDBMS :

DBMS:

-> IT IS DESKTOP(STANALONE) APLICATION

-> IT DOESN'T SUPPORTS MULTIPLE USERS AND MULTIPLE PLATFORMS.

-> IT PROVIDES POOR SECURITY.

EX: DBASE,FOXPRO,MS-ACCESS,ORACLE 6.0

RDBMS:

-> QUITE OPPOSITE OF DBMS RULES.

CLIENT/SERVER ARCHITECTURE:

FRONTEND
CLIENT

COMMUNICATION CHANNEL

SERVER
BACKEND

SQL :

-> IT IS 4TH GENERATION LANGUAGE.

-> IT IS DEVELOPED BY USING 90%(C LANGUAGE) & 10%( LOW LEVEL)

-> IT IS DEVELOPED BY E.F CODD, HE IS AN IBM EMPLOYEE.

-> IT IS COMMON LANGUAGE FOR EVERY RDBMS PACKAGE.

-> IT SUPPORTS IN-LINE COMMANDS.


E.F CODD

SQL

ORACLE SQL-SERVER SYBASE

SQL *PLUS TRANSACT SQL

SQL PL/SQL
(NP) (PL)

WHAT IS THE DIFFERENCES BETWEN ORACLE AND SQL SERVER

ORACLE SQL SERVER

1. IT IS CUI BASED 1. IT IS GUI BASED


2. IT PROVIDES HIGH SECURITY 2. IT PROVIDES POOR SECURITY
3. IT IS PLATFORM INDEPENDENT 3. IT IS PLATFORM DEPENDENT
4. IT SUPPORTS DIFFERENT APPLICATION
S/W TOOLS
EX: JAVA,.NET 4. IT SUPPORTS ONLY MICROSOFT PRODUCTS
EX: VB,.NET

ORACLE VERSIONS:

ORACLE 6.0 : -> IT SUPPORTS DBMS FEATURES.


IT DOESN'T SUPPORT CLIENT-SERVER ARCHITECTURE

ORACLE 7.X-> SUPPORTS CLIENT-SEVER ARCHITECTURE.

ORACLE 8.0 -> IT SUPPORTS OORDBMS

ORACLE 8I -> IT SUPPORTS WEB APPLICATIONS

ORACLE 9I -> IT SUPPORTS XML


IT SUPPORTS NEW FEATURES COLUMN RENAME,

ORACLE 10G -> IT SUPPORTS REGULAR EXPRESSIONS.

ORACLE 11i -> it is ERP TOOL

ORACLE DATATYPES:

DATATYPE :
-> IT IS A TYPE OF INFORMATION STORED IN MEMORY.

2 TYPES :

1. SIMPLE DATATYPE - SQL SUPPORTS

2. COMPOUND DATATYPE(USER DEFINED DATATYPES) - PL/SQL CAN SUPPORT COMPOSITE


DATATYPE

1. SIMPLE DATATYPES :

1. NUMBER(P,S): -> PRECISION , S->SCALE


-> IT ACCEPTS NUMARIC VALUES.

-> MAXIMUM RANGE :

32 DIGITS(7.X)
38 DIGITS(8.0)

EX: EMPNO NUMBER(2); 12,78, 99


SAL NUMBER(5,2); 999.99

2. CHAR(SIZE):

-> IT IS FIXED LENGTH DATATYPE.

-> IT ACCEPTS ALPHABETS,ALPHANUMARICS

-> MAXIMUM LIMIT


256 BYTES(7.X)
2000 BYTES(8.0)

EX: ENAME CHAR(10); 'RAM'

3. VARCHAR2(SIZE):

-> IT SUPPORTS DYNAMIC MEMORY ALLOCATION.

-> IT ACCEPTS ALPHABETS,ALPHANUMARICS

-> MAXIMUM LIMIT


2000 BYTES(7.X)
4000 BYTES(8.0)

EX: ENAME VARCHAR2(10); 'RAM'

4. DATE :

-> IT SUPPORTS DATE VALUES


-> IT IS FIXED LENGTH DATATYPE.
-> IT OCCUPIES 7 BYTES(FIXED)
DEFAULT DATE FORMAT IS 'DD-MON-YY'

EX: DOJ DATE; '12-AUG-09'

5. LONG

-> IT SUPPORTS NUMBERS AND CHARACTERS


-> MAXIMUM LIMIT 2GB

EX: REMARKS LONG;

6. RAW/LONG RAW :

-> THIS DATATYPE STORES IMAGES.

-> MAXIMUM LIMIT 2GB(LONG RAW), RAW(2000 BYTES)

EX: PHOTO LONG RAW;


SQL :

SQL IS DEVIDED INTO 5 SUB LANGUAGES

1. DDL(Data Definition Language)

2. DML(Data Manipulation Language)

3. DRL(Data Retreival Language)

4. DCL(Data Control Lanauge)

5. TCL(Transaction Control Language)

1. DDL:

1. CREATE 2. ALTER 3. RENAME 4. TRUNCATE


5. DROP

1. CREATE :

-> IT IS USED TO CREATE NEW DB OBJECT.

DB OBJECT : A COMPONENT AUTOMATICALLY REGISTRED IN SYSTEM SOFTWARE


IS CALLED DB OBJECT.

EX: TABLE,VIEWS,INDEXES, SYNONYMS, SEQUENCES

HOW TO CREATE A TABLE :

TABLE : IT IS A COLLECTION OF INFORMATION STORED IN ROWS AND COLUMNS FORMAT.


IT IS COMMON DB OBJECT FOR EVERY RDBMS PACKAGE.
MAXIMUM 1000 COLUMNS ARE ALLWED AND UNLIMITED PER A TABLE.

SYNTAX:
CREATE TABLE <TABLE_NAME> ( COLUMN1 DATATYPE(SIZE), COLUMN2
DATATYPE(SIZE),....);

EX: CREATE TABLE EMP(EMPNO NUMBER(2),ENAME VARCHAR2(10),SAL NUMBER(6,2));


-> TABLE ALLOWS MAXIMUM 1000 COLUMNS
UNLIMITED ROWS.

DESC :

-> IT SHOWS STRUCTURE OF THE TABLE.

SYNTAX:
DESC <TABLE_NAME>;

EX: DESC EMP;

2. ALTER :

-> IT IS USED TO CHANGE EXISTING STRUCTURE OF THE TABLE.

-> IT HAS 4 OPTIONS

1. ADD 2. MODIFY 3. RENAME 4. DROP


1. ADD:

-> IT ADDS A NEW COLUMN INTO EXISITING TABLE.

EX: ALTER TABLE EMP456 ADD DEPTNO NUMBER(2);

2. MODIFY :

-> IT IS USED TO INCRE/DECRE SIZE OF COLUMN OR TO CHANGE DATATYPE OF


COLUMN

EX: ALTER TABLE EMP MODIFY EMPNO NUMBER(4);

TO CHANGE DATATYPE OF COLUMN:

ALTER TABLE EMP MODIFY EMPNO VARCHAR2(4);

NOTE : EMPNO COLUMN MUST BE EMPTY.

3. RENAME(COLUMN RENAME) :

->IT IS USED TO RENAME COLUMN NAME

EX: ALTER TABLE EMP RENAME COLUMN SAL TO BASIC;

4. DROP(COLUMN) :

->IT IS USED TO DROP COLUMN NAME PERMANENTLY

EX: ALTER TABLE EMP DROP COLUMN DEPTNO;

3. RENAME(TABLE RENAME) :

EX: RENAME EMP TO EMP123;

4. TRUNCATE:

-> IT DELETES THE ROWS PERMANENTLY, BUT STRUCUTURE IS PRESENT.

EX: TRUNCATE TABLE EMP123;

5. DROP :

-> IT DELETES THE ROWS AND STRUCTURE PERMANENTLY.

EX: DROP TABLE EMP123;

2. DML:

-> USED TO MANIPULATE EXISTING DATA.

1. INSERT 2. UPDATE 3. DELETE


1. INSERT :

-> IT IS USED TO INSERTING NEW ROWS INTO TABLE.

-> IT HAS TWO SYNTAXES:

1. INSERTING VALUES INTO ALL COLUMNS

2. INSERTING VALUES INTO REQUIRED COLUMNS

1. SYNTAX:

INSERT INTO <TABLE_NAME> VALUES(VALUE1,VALUE2,.......);

EX: INSERT INTO EMP123 VALUES (1,'AAAA',6000);

INSERT INTO EMP123 VALUES(&EMPNO,'&ENAME',&SAL);

Enter value for empno: 2


Enter value for ename: BBBB
Enter value for sal: 5000
old 1: INSERT INTO EMP123 VALUES(&EMPNO,'&ENAME',&SAL)
new 1: INSERT INTO EMP123 VALUES(2,'BBBB',5000)

1 row created.

INSERTING MULTIPLE RECORDS INTO EMPLOYEE TABLE

INSERT INTO EMP009 VALUES(&EMPNO,'&ENAME',&BASIC,&DEPTNO,'&JOB');

2. SYNTAX:

INSERT INTO <TABLE_NAME>(COLUMN_LIST) VALUES(DATA LIST);

INSERT INTO EMP123(EMPNO,ENAME) VALUES(&EMPNO,'&ENAME');

2. UPDATE :

-> IT IS USED TO MODIFY EXISTING DATA.

SYNTAX:

UPDATE <TABLE_NAME> SET <COLUMN_NAME1>=<VALUE1>,[..... WHERE


<CONDITION>];

UPDATE EMP123 SET =SAL+SAL*10/100;

UPDATE EMP123 SET SAL=3500 WHERE EMPNO=5;

3. DELETE :

-> IT DELETE THE ROWS TEMPORARILY, STRUCTURE IS PRESENT.

SYNTAX:
DELETE FROM <TABLE_NAME> [ WHERE <CONDITION>];
EX: DELETE FROM EMP123;

DELETE FROM EMP123 WHERE EMPNO=6;

3. DRL :

-> USED TO RETRIEVE DATA FROM TALE

SELECT

SELECT */COLUMN_LIST from <table_name> [ where <condition>/


group by/
having <condition>/
order by clause];

SELECT * FROM EMP;

ORACLE O.P:

1. Arthametic o.p: +,-,*,/


2. Relationl o.p: >,<,>=,<=,=,!=or <>
3. Logical O.P: AND, OR, NOT
4. SPECIAL O.P: IN, NOT IN, BETWEEN, NOT BETWEEN, LIKE, NOT LIKE,
IS NULL, IS NOT NULL

* KEYwords are not allowd to declare column names

AND TRUTH TABLE:

T T T
T F F
F T F
F F F

OR TRUTH TABLE:

T T T
T F T
F T T
F F F

NOT TRUTH TABLE

T F
F T

1. to display employee details


select * from emp;
2. to display who are working in 10th department
select * from emp where deptno=10;
3. to display who are working in 10th and 20th department
select * from emp where deptno=10 or deptno=20;
4. write a query to display who are join in 1981 year.
SELECT * FROM EMP WHERE HIREDATE>='01-JAN-1981' AND HIREDATE<='31-
DEC-1981'
5. to display who working in 20 and 30th departments and their jobs matched with
'CLERK'
select * from emp where (deptno=20 or deptno=30) and job='CLERK';

6. to display who are not working in 10th department.


select * from emp where deptno!=10;

7. to display whose employee numbers matched with 7902,7788,7521,7566

IN:
-> it compares given list of values.
-> it is valid for any datatype.
-> it improves the performance while retrieving data.
select * from emp where empno in(7902,7788,7521,7566);
Not in :
-> it displays other than the given list of values.
select * from emp where empno not in(7902,7788,7521,7566);

Between :

-> it compare values within the range.


-> it is valid for number and date dataypes.

list the employees who are getting salaries morethan 1000 and lessthan 4000;

select * from emp where sal between 1000 and 4000;


or
select * from emp where sal>=1000 and sal<=4000;

Not between:

-> it compres values within the range and it displays the data out of the given
range.

select * from emp where sal not between 1000 and 4000;

Like:

-> this operator compares given pattern.


-> it is valid for only character values.

'%', '*' '_' ARE WILD CHARACTERS.

list the employees whose names start with 's' characters.


select * from emp where ename like 'S%';
list the employees whose names end with 's' characters.
select * from emp where ename like '%S';
list the employee whose names second character start with 'D';
select * from emp where ename like '_D%';
list the employees whose names having 'll'
select * from emp where ename like '%LL%'
LIST THE employees whose names having 5 characters
select * from emp where ename like '_____'

Not like:

-> reverse of like operator.

select * from emp where ename not like 'S%';


Is null:

-> it compares null vlaues.


-> it is valid for any dataype.

list the employees who are not getting commission.

select * from emp where comm is null;

Is not null:

-> reverse of is null o.p


list the employee who are getting commission
select * from emp where comm is not null;

NULL:
-> it is an uncomparable and undefined value.
-> it occupies 0 bytes memory.
-> it is valid for any datatype.
-> it is common for any rdbms package.

Built-in Functions:

basically built-in functions are classified into 4 types

1. Column Level Functions

a. Number Functions
b. Character Functions
c. Date Functions
-> these functions are applicable for columns
2. Group Functions
3. Conversion Functions
4. General Functions

1. Column Level Functions:

a. Number Functions:
-> these functions are applicable for numaric values.

1. abs()
-> it converts -ve values to +ve values
select abs(-10) from dual;
2. sqrt()
-> it finds sqrt.
select sqrt(25) from dual;
dual:
-> it predefined table
-> it contains one column and one row.

3. power()

-> it gives power value


select power(2,3) from dual;

4. sign()

-> if given input value is -ve it returns -1


-> if given input value is +ve it returns 1
-> if given input value is 0 it returns 0

select sign(-98) from dual;

5. round()
-> it rounds nearest value
select round(15.6) from dual;
6. trunc()
-> it truncates decimal digits
select trunc(15.64) from dual;
7. sin():
-> select sin(90) from dual;
select round(sin(90)) from dual;
8.cos()
9.tan()
10. log()
select log(10,2) from dual;

2. Character Functions:
-> these functions are applicable for character values.

1. lower():
-> it converts upper case to lower case
select lower('RAMA') from dual;
2. upper():

select upper('rama') from dual;


3. initcap():
-> it displays initial capital letter for the given data.
select initcap('rama krishna') from dual;
4. length():
-> it displays sizeof the given data.
select length('rama') from dual;
5. substr() : (substring)
-> it displays the part of the given string
select substr('rama krishna',6) from dual;
select substr('rama krishna',6,4) from dual;
select job,substr(job,1,3) from emp;
6. concat():
-> it appends given two strings.
select concat('rama','krishna') from dual;
select concat(concat('rama',' krishna'),' raju') from dual;
select initcap(concat(concat('rama',' krishna'),' raju')) from dual;

|| -> concatenation operator:


-> it concats multiple strings at a time.

select 'rama '||'krishna '||'raju '||',hyd' from dual;


select ename|| ' is a '||substr(job,1,3)||' eater' from emp where
job='MANAGER';

INSTR :

-> IT displays searching string position.

SQL> SELECT INSTR('ORACLE CORPORATION','OR',3,2) FROM DUAL;

INSTR('ORACLECORPORATION','OR',3,2)
-----------------------------------
12

3. Date Functions:

select sysdate from dual;

sysdate: it displays current system date and time.

1. add_months() :
-> it add months to given date
select add_months(sysdate,2) from dual;
select add_months(sysdate,-2) from dual;
2. months_between():
-> it displays months between given two months.
select months_between('02-dec-09',sysdate) from dual;
3. last_day():
-> it display last day of the month.
select last_day(sysdate) from dual;
4. next_day():
-> it displays coming week of the date.

select next_day(sysdate,'fri') from dual;

group functions:

-> these functions compares all rows and gives one row output.

select max(sal) from emp;


select min(sal) from emp;
select sum(sal) from emp;
select avg(sal) from emp;
select count(empno) from emp;

-> this function counts no.of empno records in table.


-> this function ignores nulls.

select count(comm) from emp;

select variance(sal) from emp;

select stddev(sal) from emp;

3. Conversion Functions:

1. to_char()
2. to_date()
3.to_number()

1. to_char() :

--> this function converts date or number values into character format.

ex:

date formats:
select to_char(sysdate,'d') from dual;

d-> week of the day


dd-> day of the month.
select to_char(sysdate,'dd') from dual;
ddd-> day of the year.
select to_char(sysdate,'ddd') from dual;
dy -> first three characters of the day.
select to_char(sysdate,'dy') from dual;
day-> fullform of the day
select to_char(sysdate,'day') from dual;
w-> week of the month.
select to_char(sysdate,'w') from dual;
ww-> week of the year
select to_char(sysdate,'ww') from dual;
mm-> it displays month in numaric format
select to_char(sysdate,'mm') from dual;
mon-> first three character of the month
select to_char(sysdate,'mon') from dual;
month-> fullform of the month
select to_char(sysdate,'month') from dual;
yy-> last two digits of the year
select to_char(sysdate,'yy') from dual;
yyyy-> four digts of the year
select to_char(sysdate,'yyyy') from dual;
year-> year in character format
select to_char(sysdate,'year') from dual;
q-> quarter of the year
select to_char(sysdate,'q') from dual;
cc-> displays current century
select to_char(sysdate,'cc') from dual;
hh-> displays hours(default 12 hours base)
hh24->
select to_char(sysdate,'hh12') from dual;
mi -> minutes
ss-> seconds
select to_char(sysdate,'hh24:mi:ss') from dual;
a.m. ->
select to_char(sysdate,'hh:mi:ss a.m.') from dual;

2. to_date() :
-> converts character values into default date format('dd-mon-yy').

05/09/09
select to_date('05/09/09','dd/mm/yy') from dual;
select to_char(to_date('13-feb-1981','dd-mon-yyyy'),'day') from dual;

3. to_number() :

-> it converts character vlaues into number format.

select to_number('123')+456 from dual;

4. GENERAL FUNCTIONS:

-> these functions are applicable any type of data

select greatest(34,67,12,34,76) from dual;


select least('d','cd','bcd','abcd') from dual;

select user from dual;


-> it diplays present connected user

nvl():

-> used to perform arthmatic expressions using null values.


-> this functions supports all datatypes.
select empno,ename,sal,nvl(comm,0),sal+nvl(comm,0) from emp;

group by clause:

-> it is used to group the rows on specified column


-> whenever an ordinary column retrieved along with group function, then
all ordinary columns must be placed on after by group by cluase.

to display departmentwise maximum salaries

select deptno,max(sal) from emp group by deptno;

select deptno,max(sal),min(sal),sum(sal),avg(sal),count(deptno) from emp


group by deptno;

having clause:

-> it checks grouped results.


-> it is valid for after group by clause.

-> to display morethan 4 employees working in each deparment.

select deptno,max(sal),min(sal),sum(sal),avg(sal),count(deptno) from


emp
group by deptno having count(deptno)>4

order by :

-> it display data in either ascending/decending order


-> by default ascending order
-> it is valid in select statement.

select * from emp order by empno asc;


select * from emp order by empno desc;
select * from emp order by deptno,ename;

JOINS:

-> to retrieve data from morethan one table.

Join Query: to retrieve data from morethan one table in a single query is called
join query.

5 types of joins:

1. Equi join/inner join/simple join


2. Non-equi Join
3. Cartesian Join
4. Outer Join
5. Self Join

1. Equi Join:

-> to retrieve data from morethan one table in a single query using eQuality
condition.
-> if N tables are joined N-1 conditions are required.
-> Join condition is placed on where cluase of select,update,delete
statements.
-> tables must have atleast one similar column name and
corresponding datatypes should be matched.

to display employee information and corresponding department information.

SELECT EMPNO,ENAME,HIREDATE,SAL,EMP.DEPTNO,DNAME,LOC FROM EMP, DEPT


WHERE EMP.DEPTNO=DEPT.DEPTNO

2. Non-Equi Join:

-> to join the tables without using equality condition

to display employee information alongwith grades

select empno,ename,job,hiredate,sal,deptno,grade from emp,salgrade


where sal between losal and hisal;

3. Cartesian Join or Cross Join:

-> to join the tables without using any condition

select empno,ename,hiredate,sal,emp.deptno,dname,loc from emp, dept;

4. Outer Join:

-> this jion displays matched rows from both table1 and table2 and unmatched
rows from table2.

1.Right Outer Join:


select empno,ename,sal,dept.deptno,dname,loc from emp , dept
where emp.deptno(+)=dept.deptno;

2.Left Outer Join:

select empno,ename,sal,dept.deptno,dname,loc from emp , dept


where emp.deptno=dept.deptno(+);

5. Self Join:

-> to join the table it self

Select m.ename manager, e.enane employee from emp e, emp m


where m.empno=e.mgr;
********
SUB-QUERIES:

-> Query within a query.


-> sub-query is placed on where clause of select,UPDATE,DELETE STATEMENTS.
-> maximum 32 queries can be nested.
-> to improve the performance while retrieving data
types of sub-queries:

1. simple Sub-query
2. multi-row sub-query
3. multi-column sub-query
4. co-related sub-query
5. Scalar Query

1. simple subquery:

-> in this query first inner query is executed, depends upon output of inner
query the outer query will be executed.

- to display smith's employee coleagues.


select * from emp where deptno=(select deptno from emp where
ename='SMITH');
- to display maximum salary employee details
select * from emp where sal=(select max(sal) from emp);
- to display who are working in 'ACCOUNTING' department.
select * from emp where deptno=(select deptno from dept where
dname='ACCOUNTING');

2. Multi row subquery :

-> inner query returns morethan one row

NOTE : = OPERATOR COMPARES ONLY SINGLE VALUES.

ORACLE DEFAULT TABLES : EMP, DEPT,SALGRADE,BONUS & DUAL;

SPECIAL O.P:
IN, ANY, ALL,EXISTS
- to display who are working in 'ACCOUNTING' and 'RESEARCH' depatment.
select * from emp where deptno IN(select deptno from dept where
dname='ACCOUNTING'
or dname='RESEARCH');
- to display who are getting salaries morethan 30th deparment.
select * from emp where sal >all(select sal from emp where deptno=30);

examples:
select * from emp where sal >any(select sal from emp where deptno=30);
select * from emp where sal <all(select sal from emp where deptno=30);
select * from emp where sal <any(select sal from emp where deptno=30);

- to display who are getting morethan increments.


SELECT * FROM EMP WHERE EMPNO IN(SELECT EMPNO FROM INCR GROUP BY EMPNO
HAVING COUNT(EMPNO)>1);

exists:
select * from emp where exists(select empno from emp where
ename='SMITH');

3. Multi-column Subquery :

-> subquery returnS multiple columns

- to display only managers(bosses)


select ename from emp where (empno,deptno) in (select mgr,deptno from
emp);

4. Co-related Subquery:

-> in this query first outer query is executed, depends upon output of
outerquery,
the inner query will be executed.
-> if outer query executed N times, inner query is also executed N times.
-> the outer query column is placed on inner query where condition, that column
treated as co-related column.

- to display who are getting morethan increments.


SELECT * FROM EMP E WHERE 1<(SELECT COUNT(I.EMPNO) FROM INCR I
WHERE I.EMPNO=E.EMPNO);

5. SCALAR QUERY

-> INNNER QUERY IS PLACED COLUMN_LIST OF OUTER QUERY.

EX: select deptno,dname,loc,(select sum(sal) from emp where deptno=d.deptno)


from dept d;

CONSTRAINTS:

-> Constraint is a predefined rule, applied on columns at a time of table


creation or after it.

-> Constraits are activated when ever DML(Insert,Update,Delete) operarions are


performed.

-> also activated when tables are manipulated by others users or other
application s/w tools

constraint types:

1. NOT NULL
2. UNIQUE
3. CHECK
4. DEFAULT
5. PRIMARY KEY
6. FOREIGN KEY(References)

1. NOT NULL:

-> It doesn't accept null values.


-> it is column level constraint

ex:
create table EMP007(empno number(2) NOT NULL,
ename varchar2(10),
sal number(8,2));
SQL> INSERT INTO EMP007 VALUES(&EMPNO,'&ENAME',&SAL);
Enter value for empno: 1
Enter value for ename: AAAA
Enter value for sal: 6000
old 1: INSERT INTO EMP007 VALUES(&EMPNO,'&ENAME',&SAL)
new 1: INSERT INTO EMP007 VALUES(1,'AAAA',6000)
1 row created.

SQL> /
Enter value for empno: 2
Enter value for ename: BBBB
Enter value for sal: 5500
old 1: INSERT INTO EMP007 VALUES(&EMPNO,'&ENAME',&SAL)
new 1: INSERT INTO EMP007 VALUES(2,'BBBB',5500)

1 row created.

Enter value for empno: NULL


Enter value for ename: CCCC
Enter value for sal: 7000
old 1: INSERT INTO EMP007 VALUES(&EMPNO,'&ENAME',&SAL)
new 1: INSERT INTO EMP007 VALUES(NULL,'CCCC',7000)
INSERT INTO EMP007 VALUES(NULL,'CCCC',7000)
*
ERROR at line 1:
ORA-01400: cannot insert NULL into ("SCOTT"."EMP007"."EMPNO")

2. UNIQUE :

-> It should not accept duplicates


-> It accepts more no.of nulls.

create table EMP007(empno number(2) UNIQUE,


ename varchar2(10),
sal number(8,2));

SQL> INSERT INTO EMP007 VALUES(&EMPNO,'&ENAME',&SAL);


Enter value for empno: 1
Enter value for ename: AAAA
Enter value for sal: 6000
old 1: INSERT INTO EMP007 VALUES(&EMPNO,'&ENAME',&SAL)
new 1: INSERT INTO EMP007 VALUES(1,'AAAA',6000)

1 row created.

SQL> /
Enter value for empno: 2
Enter value for ename: BBBB
Enter value for sal: 4500
old 1: INSERT INTO EMP007 VALUES(&EMPNO,'&ENAME',&SAL)
new 1: INSERT INTO EMP007 VALUES(2,'BBBB',4500)

1 row created.

SQL> /
Enter value for empno: 2
Enter value for ename: CCCC
Enter value for sal: 7000
old 1: INSERT INTO EMP007 VALUES(&EMPNO,'&ENAME',&SAL)
new 1: INSERT INTO EMP007 VALUES(2,'CCCC',7000)
INSERT INTO EMP007 VALUES(2,'CCCC',7000)
*
ERROR at line 1:
ORA-00001: unique constraint (SCOTT.SYS_C007507) violated
** All constraint_names are stored in 'USER_CONSTRAINTS' System table

to see the constraint_name on particular table

select constraint_name,constraint_type from user_constraints


where table_name='EMP007'

Explicitely give the constraint names:

create table EMP007(empno number(2) Constraint emp007_empno_un UNIQUE,


ename varchar2(10), sal number(8,2));

select constraint_name,constraint_type from user_constraints


where table_name='EMP007';

3. CHECK :

-> if condition is true row is inserted, otherwise it shows constraint


voilated error.

ex:

Create table Emp007(Empno Number(2) constraint emp007_empno_nn not


null,
Ename Varchar2(10),
Sal Number(8,2) constraint
emp007_sal_chk check (sal>=3000),
Deptno Number(2));

SQL> insert into emp007 values(&empno,'&ename',&sal,&deptno);


Enter value for empno: 1
Enter value for ename: AAAA
Enter value for sal: 4500
Enter value for deptno: 10
old 1: insert into emp007 values(&empno,'&ename',&sal,&deptno)
new 1: insert into emp007 values(1,'AAAA',4500,10)

1 row created.

SQL> /
Enter value for empno: 2
Enter value for ename: BBBB
Enter value for sal: 2900
Enter value for deptno: 20
old 1: insert into emp007 values(&empno,'&ename',&sal,&deptno)
new 1: insert into emp007 values(2,'BBBB',2900,20)
insert into emp007 values(2,'BBBB',2900,20)
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.EMP007_SAL_CHK) violated

Acc_type varchar2(1) check acc_type in('S','C')


Age number(3) check age between 21 and 35

4. Default:

-> it stores default values.


ex:

Create table Emp007(Empno Number(2),


Ename Varchar2(10),
Sal Number(8,2),
Doj Date Default Sysdate,
Deptno Number(2));

SQL> Insert into Emp007(empno,ename,sal,deptno)


values(&empno,'&ename',&sal,&deptno);
Enter value for empno: 1
Enter value for ename: aaaa
Enter value for sal: 7000
Enter value for deptno: 10
old 1: Insert into Emp007(empno,ename,sal,deptno)
values(&empno,'&ename',&sal,&deptno)
new 1: Insert into Emp007(empno,ename,sal,deptno) values(1,'aaaa',7000,10)

1 row created.

SQL> /
Enter value for empno: 2
Enter value for ename: bbbb
Enter value for sal: 8000
Enter value for deptno: 20
old 1: Insert into Emp007(empno,ename,sal,deptno)
values(&empno,'&ename',&sal,&deptno)
new 1: Insert into Emp007(empno,ename,sal,deptno) values(2,'bbbb',8000,20)

1 row created.

SQL> select * from emp007;

EMPNO ENAME SAL DOJ DEPTNO


---------- ---------- ---------- --------- ----------
1 aaaa 7000 05-SEP-09 10
2 bbbb 8000 05-SEP-09 20

5. Primary key: ( Not Null + Unique + Index ):

-> it doesn't accept Nulls


-> it avoids duplicates
-> it improves the performance while retrieving data.
-> only one primary key constraint can be added in column level.
-> if table contains primary keys that table treated as Master Table/Parent
Table/
Independent Table

ex:

Create table Dept007(Deptno Number(2) Constraint dept007_detpno_pk Primary


Key,
Dname Varchar2(10),
Loc Varchar2(10));

6. Foreign Key(References):

-> it is used to establish relationship between two tables.


-> this constraint can be added to the primary key constraint or unique
constraint column of other table.
-> if table contains foreign keys that table treated as Detailed
Table/Transaction Table/ child table/dependent table.

ex:
Create table Emp007 (Empno Number(2),Ename Varchar2(10),
Sal Number(8,2),
Deptno Number(2) Constraint empoo7_deptno_fk
references dept007(deptno));

SQL> INSERT INTO EMP007 VALUES(&EMPNO,'&ENAME',&SAL,&DEPTNO);


Enter value for empno: 1
Enter value for ename: AAA
Enter value for sal: 6000
Enter value for deptno: 10
old 1: INSERT INTO EMP007 VALUES(&EMPNO,'&ENAME',&SAL,&DEPTNO)
new 1: INSERT INTO EMP007 VALUES(1,'AAA',6000,10)

1 row created.

SQL> /
Enter value for empno: 2
Enter value for ename: BBB
Enter value for sal: 4500
Enter value for deptno: 30
old 1: INSERT INTO EMP007 VALUES(&EMPNO,'&ENAME',&SAL,&DEPTNO)
new 1: INSERT INTO EMP007 VALUES(2,'BBB',4500,30)

1 row created.

SQL> /
Enter value for empno: 3
Enter value for ename: CCCC
Enter value for sal: 7000
Enter value for deptno: 10
old 1: INSERT INTO EMP007 VALUES(&EMPNO,'&ENAME',&SAL,&DEPTNO)
new 1: INSERT INTO EMP007 VALUES(3,'CCCC',7000,10)

1 row created.

SQL> /
Enter value for empno: 4
Enter value for ename: DDDD
Enter value for sal: 9000
Enter value for deptno: 50
old 1: INSERT INTO EMP007 VALUES(&EMPNO,'&ENAME',&SAL,&DEPTNO)
new 1: INSERT INTO EMP007 VALUES(4,'DDDD',9000,50)
INSERT INTO EMP007 VALUES(4,'DDDD',9000,50)
*
ERROR at line 1:
ORA-02291: integrity constraint (SCOTT.EMPOO7_DEPTNO_FK) violated - parent key not
found

SQL> DELETE FROM DEPT007 WHERE DEPTNO=30;


DELETE FROM DEPT007 WHERE DEPTNO=30
*
ERROR at line 1:
ORA-02292: integrity constraint (SCOTT.EMPOO7_DEPTNO_FK) violated - child record
found
SQL> DELETE FROM DEPT007 WHERE DEPTNO=40;

1 row deleted.

1. On Delete Cascade:

-> it deletes parent record and also deleted corresponding childs.

How to Drop a Contraint:

Alter table emp007 drop constraint emp007_deptno_fk;

How to Add Foreign Key constraint at Table Level:

Alter Table emp007 add Constraint Emp007_deptno_fk Foreign Key(deptno)


References Dept007(deptno) on delete
cascade;

SQL> select * from dept007;

DEPTNO DNAME LOC


---------- ---------- ----------
10 ACC HYD
20 RES SEC
30 SALES CHENNAI

SQL> select * from emp007;

EMPNO ENAME SAL DEPTNO


---------- ---------- ---------- ----------
1 AAA 6000 10
2 BBB 4500 30
3 CCCC 7000 10
4 DDD 3000 10
5 EEE 5500 20

SQL> Delete from dept007 where deptno=30;

1 row deleted.

SQL> select * from dept007;

DEPTNO DNAME LOC


---------- ---------- ----------
10 ACC HYD
20 RES SEC

SQL> select * from emp007;

EMPNO ENAME SAL DEPTNO


---------- ---------- ---------- ----------
1 AAA 6000 10
3 CCCC 7000 10
4 DDD 3000 10
5 EEE 5500 20

2. On Delete Set Null:

-> it deletes parent records and corresponding child records set to null
values.

Alter table emp007 drop constraint emp007_deptno_fk;

Alter Table emp007 add Constraint Emp007_deptno_fk Foreign Key(deptno)


References Dept007(deptno) on delete set
null;

SQL> Alter table emp007 drop constraint emp007_deptno_fk;

Table altered.

SQL> Alter Table emp007 add Constraint Emp007_deptno_fk Foreign Key(deptno)


2 References Dept007(deptno) on
delete set null;

Table altered.

SQL> select * from emp007;

EMPNO ENAME SAL DEPTNO


---------- ---------- ---------- ----------
1 AAA 6000 10
3 CCCC 7000 10
4 DDD 3000 10
5 EEE 5500 20

SQL> select * from dept007;

DEPTNO DNAME LOC


---------- ---------- ----------
10 ACC HYD
20 RES SEC

SQL> delete from dept007 where deptno=10;

1 row deleted.

SQL> select * from dept007;

DEPTNO DNAME LOC


---------- ---------- ----------
20 RES SEC

SQL> select * from emp007;

EMPNO ENAME SAL DEPTNO


---------- ---------- ---------- ----------
1 AAA 6000
3 CCCC 7000
4 DDD 3000
5 EEE 5500 20
SQL>

Adding contraints are two types :

1. column level constraint : constraints are added next to column name

2. table level constraint : contraints are added after declaring all columns at
the time
table creation
or
after table creation(using ALTER command).

Composite Primary key:

-> we can add more than one primary key(at table level)

ex:

CREATE TABLE PRODUCT(PRODID NUMBER(2),


ITEMID NUMBER(2),
PNAME VARCHAR2(10),
INAME VARCHAR2(10),
PRICE NUMBER(8,2),
PRIMARY KEY(PRODID,ITEMID));

* MAXIMUM 32 COLUMNS CAN BE ADDED.

OR

SQL> ALTER TABLE PRODUCT ADD CONSTRAINT PROD_PID_IID_PK PRIMARY KEY(ITEMID,PRODID);

how to enable/disable constraints :

Alter table emp007 disable constraint emp007_deptno_fk;

Alter table emp007 enable constraint emp007_deptno_fk;

HOW TO ADD CONSTRAINTS IN TABLE LEVEL(after creating of table) :

CREATE TABLE EMP123(EMPNO NUMBER(2),


ENAME VARCHAR2(10),
SAL NUMBER(8,2),
DEPTNO NUMBER(2));

table created.

ALTER TABLE EMP123 ADD CONSTRAINT EMP123_EMPNO_UN UNIQUE(EMPNO);

ALTER TABLE EMP123 MODIFY ENAME CONSTRAINT EMP123_ENAME_NN NOT NULL;

ALTER TABLE EMP123 ADD CONSTRAINT EMP123_SAL_CHK CHECK(SAL>=3000);

HOW TO RENAME A CONSTRAINT :

ALTER TABLE EMP123 RENAME CONSTRAINT EMP123_SAL_CHK TO EMP321_SAL_CHK;


SET OPERATORS:

-> It is used to join outputs of select statments.


-> select statements must have equal no.of columns and similar datatypes.
-> maximum 32 statements can be nested.

types of set operators:

1. UNION ALL
2. UNION
3. INTERSECT
4. MINUS

1. UNION ALL :
Outputs of Q1+ Outpus of Q2

select job from emp where deptno=10


union all
select job from emp where deptno=20;

2. Union :

Common Rows from Q1 & Q2 and Unmatched rows from Q1 & Q2

select job from emp where deptno=10


union
select job from emp where deptno=20;

3. Intersect:

Common Rows from Q1 & Q2

select job from emp where deptno=10


Intersect
select job from emp where deptno=20;

4. Minus :

Displays unmatched rows from Q1(Q1-Q2)

select job from emp where deptno=10


Minus
select job from emp where deptno=20;

DCL(Data Control Language) :

-> to control data between users.

1. Grant
2. Revoke

How to Create a New user?

login to :
username: System
Password : Manager

syntax:
Create user <user_name> identified by <password>;

ex: Create user Chandu identified by tiger;

Grant Connect, Resource to Chandu;

To change password:

Alter user <user_name> identified by <newpassword>;

1. Grant :

-> it gives permissions on tables to other users.

2 types of privileges

1. system privileges
ex: connect,resource
2. object privileges
ex: select,insert,update,delete,etc.,

Scott: Grant select on emp to Chandu;

Chandu: Select *from Scott.emp;

Chandu: insert into scott.emp(empno,ename,sal,deptno) values(1,'aaa',6000,10);


insuffiecient privilegs
Scott: Grant insert on emp to chandu;

Chandu: above insert command successfully executed.

Scott: Grant all on emp to Chandu;

2. Revoke :

-> to getback permissions from users;

ex:

Scott : Revoke select on emp from Chandu;

Chandu: select * from scott.emp


insufficient privileges

to see the given permissions :

select * from user_tab_privs_made;

to see the received permissions:

select * from user_tab_privs_recd;

5. TCL(Transaction Control Language) :

-> used to control dml operations performed by user.


1. commit 2. savepiont 3. rollback

1. commit :

-> it saves data into database permanently

2. Savepoint:

-> it creates a bookmark

3. Rollback:

-> to undo dml operations

SQL> DELETE FROM EMP WHERE EMPNO=1;

1 row deleted.

SQL> SAVEPOINT S1;

Savepoint created.

SQL> INSERT INTO EMP(EMPNO,ENAME,SAL,DEPTNO) VALUES(2,'BBBB',7000,10);

1 row created.

SQL> SAVEPOINT S2;

Savepoint created.

SQL> DELETE FROM EMP WHERE DEPTNO=20;

5 rows deleted.

SQL> SAVEPOINT S3;

Savepoint created.

SQL> UPDATE EMP SET SAL=SAL+SAL*10/100;

10 rows updated.

SQL> SAVEPOINT S4;

Savepoint created.

SQL> DELETE FROM EMP WHERE EMPNO=2;

1 row deleted.

SQL> SELECT * FROM EMP;

EMPNO ENAME JOB MGR HIREDATE SAL COMM


DEPTNO
---------- ---------- --------- ---------- --------- ---------- ----------
----------
7499 ALLEN SALESMAN 7698 20-FEB-81 1760 300
30
7521 WARD SALESMAN 7698 22-FEB-81 1375 500
30
7654 MARTIN SALESMAN 7698 28-SEP-81 1375 1400
30
7698 BLAKE MANAGER 7839 01-MAY-81 3135
30
7782 CLARK MANAGER 7839 09-JUN-81 2695
10
7839 KING PRESIDENT 17-NOV-81 5500
10
7844 TURNER SALESMAN 7698 08-SEP-81 1650 0
30
7900 JAMES CLERK 7698 03-DEC-81 1045
30
7934 MILLER CLERK 7782 23-JAN-82 1430
10

9 rows selected.

SQL> ROLLBACK TO S3;

Rollback complete.

SQL> SELECT * FROM EMP;

EMPNO ENAME JOB MGR HIREDATE SAL COMM


DEPTNO
---------- ---------- --------- ---------- --------- ---------- ----------
----------
2 BBBB 7000
10
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300
30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500
30
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400
30
7698 BLAKE MANAGER 7839 01-MAY-81 2850
30
7782 CLARK MANAGER 7839 09-JUN-81 2450
10
7839 KING PRESIDENT 17-NOV-81 5000
10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0
30
7900 JAMES CLERK 7698 03-DEC-81 950
30
7934 MILLER CLERK 7782 23-JAN-82 1300
10

10 rows selected.

SQL> ROLLBACK TO S1;

Rollback complete.

SQL> 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
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
7782 CLARK MANAGER 7839 09-JUN-81 2450
10
7788 SCOTT ANALYST 7566 09-DEC-82 3000
20
7839 KING PRESIDENT 17-NOV-81 5000
10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0
30
7876 ADAMS CLERK 7788 12-JAN-83 1100
20
7900 JAMES CLERK 7698 03-DEC-81 950
30
7902 FORD ANALYST 7566 03-DEC-81 3000
20
7934 MILLER CLERK 7782 23-JAN-82 1300
10

14 rows selected.

SQL>
SQL> COMMIT;

Commit complete.

DB Objects:

ex: table, view,index,synonym,sequences,roles

table:

-> it is a collection of information stored in rows and columns


-> it is common db object for every RDBMS package
-> maximum 1000 columns are allowed and Unlimited rows per a table.

2. view :

-> it is stored select statement.


-> it is created by using base table
-> it provides high security
-> it allows dml,select, desc commands
-> it shares data between users.
-> views doesn't hold any data.
-> if u perform any dml operation on views that are reflected on base table.
-> views are stored in 'user_views' system table
syntax:

Create or Replace View <view_name> as <Select statement>;

types of views :

basically 2 types of views:

1. Simple View -> these views are created without using group functions/join
condition/arthametic expr

2. Complex View : these views are created using group functions/join


condition/arthametic expr

1. simple views:

Create or Replace View my_view as Select empno,ename,sal,deptno from emp;

insert into my_view values(1000,'KIRAN',5000,10);

Select * from my_view;


Select * from emp;

Create or Replace view dept_10 as select * from emp where deptno=10;

insert into dept_10 values(1000,'KIRAN',5000,10);

insert into dept_10 values(1001,'Kishore',4000,20);

with check option:

Create or Replace view dept_007 as select * from emp where deptno=10 with check
option;

insert into dept_007(empno,ename,sal,deptno) values(2,'yyy',7000,20);

ERROR at line 1:
ORA-01402: view WITH CHECK OPTION where-clause violation

read only views:

-> these views are for only reading purpose

-> only select statement is valid

ex: create or replace view Read_View as select * from emp with read only;

SQL> insert into read_view (empno,ename,sal) values(3,'xxx',7000);


insert into read_view (empno,ename,sal) values(3,'xxx',7000)
*
ERROR at line 1:
ORA-01733: virtual column not allowed here

2. Complex Views:

-> dml operations are not allowed.

-> only select and desc statements are valid


ex: create or replace view Comp_view as select

empno,ename,job,hiredate,sal,emp.deptno,dname,loc
from emp, dept where emp.deptno=dept.deptno;

ex1: create or replace view comp_view1 as select deptno,max(sal)


maxsal,min(sal)minsal,sum(sal) sumsal
from emp group by deptno;

how to share views:

Grant select on <view_name> to <user_name>;

eX: Grant select on my_view to chandu;

FORCE VIEWS :

-> THESE VIEWS ARE CREATED WITHOUT USING BASE TABLE.

EX: CREATE FORCE VIEW MY_FVIEW AS SELECT * FROM XYZ123;

dropping Views:

syntax:

Drop View <view_name>;

ex:

Drop View my_view;

3. index:

-> to improve the performance while retrieving data.

-> indexes are activated whenever indexed column placed on where clause.

-> indexes are stored in 'user_indexes' system table.

syntax:

Create Index <Index_Name> on <table_name>(<Column1>,[<column2>,..]);

ex: Create Index my_ind on emp(empno);

select * from emp where empno=7839;

Functional based Indexes:

-> these indexes are created by using built-in functions

ex: Create index Fun_ind on emp(upper(job));

SELECT * FROM EMP WHERE JOB='MANAGER'

dropping indexes:

Drop Index <index_name>;


ex: drop index fun_ind;

4. Synonyms:

-> synonyms created to whole table.


-> synonyms provides high security.
-> synonyms are two types

1. private synonym(default) -> it is created by user

-> with using grant permission we can use private synonyms

2. public synonym - > it is created by dba

syntax:

Create synonym <synonym_name> for <table_name>;

ex: Create synonym my_syn for emp;

2. public synonym :

-> with using ONE grant permission all users can access.

logon with :

username : System
Password: Manager

Create Public synonym public_syn for scott.emp;

grant all on public_syn to public;

connect : scott/tiger@server

sql> select * from public_syn;

connect : chandu/tiger@server

sql> select * from public_syn;

dropping synonyms:

syntax:
drop synonym <synonym_name>;

ex:
drop public synonym public_syn;

5. sequences :

-> to generate sequence of numbers automatically


-> it is not related to ONE table.
-> it has two pseudo columns
1. currval -> it show current sequence value
2. nextval -> it shows comming sequence value
->sequences are stored in 'user_sequences' system table

syntax:

create sequence <sequence_name>


start with <value>
minvalue <value>
increment by <value>
maxvalue <value>
cycle/nocycle;

ex:
create sequence my_seq1
start with 1
minvalue 1
increment by 1
maxvalue 5
nocycle;

SQL>

Table created.

SQL> insert into xyz values(my_seq.nextval);

1 row created.

SQL> /

1 row created.

SQL> /

1 row created.

SQL> select * from xyz;

EMPNO
----------
1
2
3

SQL> create table mno(sno number(2));

Table created.

SQL> insert into mno values(my_seq.nextval);

1 row created.

SQL> select * from mno;

SNO
----------
4
SQL> select my_seq.currval from user_sequences where sequence_name='MY_SEQ';

CURRVAL
----------
4

SQL> insert into mno values(my_seq.nextval);

1 row created.

SQL> insert into mno values(my_seq.nextval);


insert into mno values(my_seq.nextval)
*
ERROR at line 1:
ORA-08004: sequence MY_SEQ.NEXTVAL exceeds MAXVALUE and cannot be instantiated

SQL> ALTER SEQUENCE MY_SEQ MAXVALUE 10


2 /

Sequence altered.

SQL> insert into mno values(my_seq.nextval);

1 row created.

SQL> SELECT * FROM MNO;

SNO
----------
4
5
6

SQL> insert into mno values('KVB'||MY_SEQ.NEXTVAL);

6. ROLES :

-> IT IS a collection of different object priveliges on different tables.


-> it is created by dba

logon to : dba

username : system
password : manager

syntax:

create role <role_name>;

SQL> create role my_role1


2 /

Role created.

SQL> grant select,insert on scott.emp to my_role1;

Grant succeeded.
SQL> grant insert,update on scott.dept to my_role1;

Grant succeeded.

SQL> grant update,select on scott.salgrade to my_role1;

Grant succeeded.

SQL> grant delete on scott.incr to my_role1;

Grant succeeded.

SQL> grant my_role1 to chandu;

Grant succeeded.

removing permissions from role:

SQL> revoke select on scott.emp from my_role1

Revoke succeeded.

SQL Editor commands:

ed -> editor

save -> it saves QUERY into file

save <file_name>;

SQL> select * from emp where deptno=10;

SQL> save q1;

Get <file_name> : it shows contents of the file

sql > get q1;


select * from emp where deptno=10;
sql > select * from emp
where deptno=10;
SQL> L
1 SELECT * FROM EMP
2* WHERE DEPTNO=10
SQL> L1
1* SELECT * FROM EMP
SQL> L2
2* WHERE DEPTNO=10

SQL> SELECT * FROM EMP;


SQL> I WHERE DEPTNO=30;
SQL> L
1 SELECT * FROM EMP
2* WHERE DEPTNO=30

SQL> SELECT *FROM E


SQL> A MP WHERE DEPTNO=20;
1* SELECT *FROM EMP WHERE DEPTNO=20
SQL>

SET COMMANDS:

SET HEADING OFF(DEFAULT ON)


SQL> SET HEADING OFF
SQL> SELECT * FROM EMP;

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

AUTOCOMMIT ON(DEFAULT OFF)

SQL> SET AUTOCOMMIT ON

VERIFY OFF(DEFAULT ON) :

-> IT DOESN'T SHOW BUFFER DATA

SQL>SET VERIFY OFF


SQL> SET PAUSE ON
-> It displays rows in pagewise.
SQL> SET FEEDBACK OFF;
SQL> SET FEEDBACK ON;
SQL> SET VERIFY OFF;
SQL> SET PAUSE ON;

REPORTING COMMANDS:

TTITLE :
-> It displays top title

SQL >BTITLE 'END OF RECORDS' -> IT DISPLAYS BOTTOM TITLE


SQL>TTITLE 'EMPLOYEE INFORMATION'
SQL>SELECT * FROM EMP;

SQL> BTITLE OFF


SQL> TTITLE OFF

SQL> COLUMN EMPNO HEADING 'EMPLOYEE NUMBER'


SQL> COLUMN SAL HEADING 'BASIC SALARY'

SQL> COLUMN ENAME FORMAT A6;


SQL> COLUMN JOB FORMAT A10
SQL> SELECT * FROM EMP;
SQL> COLUMN MGR FORMAT 9999
SQL> COLUMN SAL FORMAT $9,999.99
SQL> BREAK ON DEPTNO;
SQL> SELECT * FROM EMP ORDER BY DEPTNO;
SQL> COMPUTE SUM OF SAL ON DEPTNO;
SQL> SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP ORDER BY DEPTNO;
SQL> SPOOL <FILE_NAME>;
SQL> SPOOL OFF;
Hierarchical Queries :

� These are queries that are executed upon tables that contain
hierarchical data.
� To execute the hierarchical queries, we need the following queries

START WITH : It specifies the root rows of the hierarchy

� It identifies the row(s) to be used as the Root(s) of a hierarchical Query.


� IT specifies a condition that the roots must specify.
� If START WITH is omitted, oracle used all rows in the table as ROOT rows.

CONNECT BY : It is used to specify the relationship between parent


rows and child rows of the hierarchy

� Within the condition, some part of the condition must use the PRIOR operator,
which refers to the parent row.

The form of PRIOR operator is

� PRIOR Expr Comparision � Operator


� Expr Comparison � Operator Expr.
� It cannot contain sub query

WHERE : It is used to restrict the rows returned by the


Query
without affecting other rows of the hierarchy.

EX: Select empno,ename,sal,deptno from emp


Start with ename=�KING�
CONNECT BY PRIOR EMPNO=MGR

Object Technology :

* it supports Object Oriented Programming features.

* Object is an collection of elements of different datatype stored in centrally


at
one memory location(permanently stored).
* It can have methods(functions) defined in it.
* It will not hold data, represent only structure.
* It supports �Inheritance� features of OOPS.
* It is an re-usable component.
* It stored permanently in �user_types� system table
* It can be shared with other users.

Composite Data Type :

� objects (C Structure)

Syntax :

Create type <object_name> as object


( Element1 <datatype>,
element2 <datatype>,
��������.,elementN <datatype>);

ex: Create Type Add_type as object (Hno Varchar2(10),Street Varchar2(10),


City varchar2(10),pin number(10));

Desc addr_type;

->it displays structure of the object

Using object :

Create table Stud(Roll Number(2), Name varchar2(10),


ddress addr_type, course Varchar2(10), Fee Number(8,2));

Desc student;

Insert into stu


values(101,�kiran�,add_type(�201�,�Ameerpet�,�Hyderabad�,500035),
�oracle 9i�, 2500);
Select * from stud;

Select Roll, Name, S.Address.city, s.address.pin, course,fee from stud S;

Update stud s set s.address.city=�secundrabad� where roll=101;

Delete from stud s where s.address.city=�secunderabad�;

Pseudo Columns:

Pseudo Column is a column not related to any table. It is created by system

1. ROWID
2. ROWNUM
3. LEVEL
4. NEXTVAL
5. CURRVAL

ROWID :

� It is an Unique Value
� It is automatically assigned to every record inserted
� It is an 18bit Hexadecimal Value
� It Comprises of object id, file id, block id, & record id
� It is stored permanently in database.

* RowId gives Position of Record.

� Select Rowid, deptno, dname from dept;


� Select Rowid, Empno,Ename,Sal from emp;

Removing Duplicate Rows:

Sql> Delete from Emp Where Rowid Not in (Select Min(Rowid) from Emp Group by
Empno);
Row Num :

� It is an Unique Value
� It is Automatically generated by Select Statement output(dynamic value)
� It is not stored in Database

Select Rownum,dname,loc from dept;

Select rownum,empno,ename,sal from emp;

Query for Top 5 Salary Details

Select Rownum, Empno,Ename,Sal,Job from(Select


Rownum,Empno,Ename,Sal,Job from
Emp Order by Sal Desc) where Rownum<=5;

** Inline View

** Inline View : Select statement provided in place of Table Name is


known as �Inline View�

Query for Nth Maximum Salary:

Select Rownum,Empno,Ename,Job,Sal from (select Rownum,Empno,Ename,


Job,Sal from Emp order by Sal desc)
Group by Rownum,Empno,Ename,Job,Sal having Rownum=&N;

Query for to Display Alternate Records

Select Rownum,Empno,Ename,Job,Sal from Emp group by Rownum,


Empno,Ename,Job,Sal
Having Mod(Rownum,2)=0

LEVEL :

� It gives the position of Row in Hierarchal Tree Structure


� It will arrange the select statement output in Inverted tree format
� It returns Number

Select Level, empno,ename,mgr from emp


Connect by prior empno=mgr start with Mgr is Null;

PL/SQL :

-> It executes a block of statements as a unit.


-> it supports control strucutes and iteration control statements.
(if,if..else,nested if..else,if..else lader,case,simple loop,while loop,for
loop,etc)
-> it supports exception handling
-> it supports automatic execution of code through database triggers
-> it supports subprograms(functions,procedures,packages)
-> pl/sql supports to share programs to other users and other application software
tools.
Block:

-> a set of SQL and NON-SQL statements.

2 types blocks

1. Anonymous block -> Nameless block

2. Named block -> ex: procedures,functions,packages,triggers

pl/sql block structure:

[ Declare
<variable declaration>; ]
Begin
<exec-statements>;
[ exception block
<exec-statements>; ]
end;

simple block:

Begin
<exec-statements>;
end;

Variable declaration:

Empno number(2);
sno number(4);
i number(2):=1;
ename varchar2(10);
doj date;

pl/sql supports all sql datatypes and it supports BOOLEAN

BOOLEAN : This datatype stored either TRUE or FALSE

EX:
Flag Boolean:=TRUE/FALSE;

:= ASSIGNMENT OPERATOR

PL/SQL supports:
DML,DRL,TCL Commands
PL/SQL Not supports:
DDL,DCL

comments :

-- -> SINGLE line comment

ex: -- pl/sql block for to add two numbers

/*

*/ -> Multiline Comment


Select..into :

-> it is used to store dabase values into pl/sql variables.


-> no.of database columns must be matched with no.of pl/sql variables and
corresponding datatypes.

syntax:
select column_list into pl/sql variable_list from <table_name> where
<condition>;

select empno,ename,sal,deptno into tempno,tename,tsal,tdeptno FROM EMP


where empno=7788;

dbms_output.put_line(ARG1):

-> it is used to print output.


-> it accepts only one argument.

dbms_output : package
put_line(argument1) : procedure

ex: dbms_output.put_line('welcome to pl/sql');

set serveroutput on :

-> this command displays output to output screen.

write a pl/sql block to print welcome message

SQL> SET SERVEROUTPUT ON


SQL> Begin
2 dbms_output.put_line('welcome to pl/sql');
3 end;
4 /
welcome to pl/sql

PL/SQL procedure successfully completed.

Write a pl/sql block to add two numbers;

SQL> DECLARE
2 A NUMBER(2):=&A;
3 B NUMBER(2):=&B;
4 C NUMBER(4);
5 BEGIN
6 C:=A+B;
7 DBMS_OUTPUT.PUT_LINE('ADD OF TWO NUMBERS = '||C);
8 END;
9 /
Enter value for a: 10
Enter value for b: 20
ADD OF TWO NUMBERS = 30

PL/SQL procedure successfully completed.

Write a pl/sql block to print employee details for a given employee number;
1 DECLARE
2 TEMPNO NUMBER(4):=&TEMPNO;
3 TENAME VARCHAR2(10);
4 TSAL NUMBER(8,2);
5 TDEPTNO NUMBER(2);
6 BEGIN
7 SELECT EMPNO,ENAME,SAL,DEPTNO INTO TEMPNO,TENAME,TSAL,TDEPTNO FROM EMP
8 WHERE EMPNO=TEMPNO;
9 DBMS_OUTPUT.PUT_LINE(TEMPNO||' '||TENAME||' '||TSAL||' '||TDEPTNO);
10* END;
SQL> /
Enter value for tempno: 7788
7788 SCOTT 3000 20

PL/SQL procedure successfully completed.

ATTRIBUTES:

-> it is used to declare variables dynamically

2 types
1. column type attribute
2. table type attribute

1. colmn type attribute:


-> it is used to declare variable dynamically according to table of column
structure.

syntax:
<variable_name> <table_name>.<column_name>%type;
ex:
tempno emp.empno%type;
tename emp.ename%type;

1 DECLARE
2 TEMPNO EMP.EMPNO%TYPE:=&TEMPNO;
3 TENAME EMP.ENAME%TYPE;
4 TSAL EMP.SAL%TYPE;
5 TDEPTNO EMP.DEPTNO%TYPE;
6 BEGIN
7 SELECT EMPNO,ENAME,SAL,DEPTNO INTO TEMPNO,TENAME,TSAL,TDEPTNO FROM EMP
8 WHERE EMPNO=TEMPNO;
9 DBMS_OUTPUT.PUT_LINE(TEMPNO||' '||TENAME||' '||TSAL||' '||TDEPTNO);
10* END;
SQL> /
Enter value for tempno: 7788
7788 SCOTT 3000 20

PL/SQL procedure successfully completed.

2. rowtype attribute:

-> It is used to declare variable dynamically according to specified table


structure.

Syntax:
<variable_name> <table_name>%rowtype;
ex:
E Emp%rowtype;

above 'E' variable holds only one row at a time.

1 DECLARE
2 E EMP%ROWTYPE;
3 BEGIN
4 SELECT * INTO E FROM EMP
5 WHERE EMPNO=&TEMPNO;7902
6 DBMS_OUTPUT.PUT_LINE(E.EMPNO||' '||E.ENAME||' '||E.HIREDATE||' '||E.SAL||'
'||E.DEPTNO);
7* END;
SQL> /
Enter value for tempno: 7788
7788 SCOTT 09-DEC-82 3000 20

PL/SQL procedure successfully completed.

Control Structures:

1. Simple if
2. If..else
3. Nested if..else
4. If..else ladder

1. Simple If:

syntax:

if <condition> then
<exec-statements>; -- TRUE BLOCK
end if;

EXAMPLE :

SQL> DECLARE
2 FLAG BOOLEAN:=&FLAG;
3 BEGIN
4 IF FLAG=TRUE THEN
5 DBMS_OUTPUT.PUT_LINE('WE R IN TRUE BLOCK');
6 END IF;
7 END;
8 /
Enter value for flag: TRUE
old 2: FLAG BOOLEAN:=&FLAG;
new 2: FLAG BOOLEAN:=TRUE;
WE R IN TRUE BLOCK

write a pl/sql block to find biggest of two numbers

SQL> Declare
2 A Number(2):=&a;
3 B Number(2):=&b;
4 Begin
5 If A>B then
6 DBMS_OUTPUT.PUT_LINE('A IS BIG');
7 END IF;
8 END;
9 /
Enter value for a: 10
Enter value for b: 4
A IS BIG

PL/SQL procedure successfully completed.

2. IF..ELSE

syntax:
if <condition> then
<exec-statements>; -- TRUE BLOCK
else
<exec-statements>; -- FALSE BLOCK
end if;

ex:

1 Declare
2 A Number(2):=&a;
3 B Number(2):=&b;
4 Begin
5 If A>B then
6 DBMS_OUTPUT.PUT_LINE('A IS BIG');
7 else
8 DBMS_OUTPUT.PUT_LINE('B IS BIG');
9 END IF;
10* END;
11 /
Enter value for a: 10
Enter value for b: 20
B IS BIG

SQL> DECLARE
2 NUM NUMBER(2):=&NUM;
3 BEGIN
4 IF MOD(NUM,2)=0 THEN
5 DBMS_OUTPUT.PUT_LINE('GIVEN NUMBER IS EVEN');
6 ELSE
7 DBMS_OUTPUT.PUT_LINE('GIVEN NUMBER IS ODD');
8 END IF;
9 END;
10 /
Enter value for num: 5
GIVEN NUMBER IS ODD

PL/SQL procedure successfully completed.

3. NESTED IF..ELSE

syntax:
if <condition> then
if <condition> then
<exec-statements>;
else
<exec-statements>;
end if;
else
if<condition> then
<exec-statements>;
else
<exec-statements>;
end if;
end if;

ex:

Declare
A Number(2):=&a;
B Number(2):=&b;
C Number(2):=&c;
Begin
If A>B then
if A>C then
DBMS_OUTPUT.PUT_LINE('A IS BIG');
else
DBMS_OUTPUT.PUT_LINE('C IS BIG');
End if;
else
if B>C then
DBMS_OUTPUT.PUT_LINE('B IS BIG');
else
DBMS_OUTPUT.PUT_LINE('C IS BIG');
End if;
End if;
END;

Enter value for a: 10


Enter value for b: 20
Enter value for c: 30
C IS BIG

PL/SQL procedure successfully completed.

SQL> /
Enter value for a: 30
Enter value for b: 20
Enter value for c: 10
A IS BIG

PL/SQL procedure successfully completed.

SQL> /
Enter value for a: 10
Enter value for b: 30
Enter value for c: 20
B IS BIG

PL/SQL procedure successfully completed.

4. IF..ELSE Ladder

syntax:
if <condition> then
<exec-statements>;
elsif <condition> then
<exec-statements>;
elsif <condition> then
<exec-statements>;
elsif <condition> then
<exec-statements>;
else
<exec-statements>;
end if;

ex:

1 Declare
2 tavg number(5,2):=&tavg;
3 Begin
4 if tavg>=70 then
5 dbms_output.put_line('Grade A');
6 elsif tavg>=60 then
7 dbms_output.put_line('Grade B');
8 elsif tavg>=50 then
9 dbms_output.put_line('Grade C');
10 elsif tavg>=40 then
11 dbms_output.put_line('Grade D');
12 else
13 dbms_output.put_line('Grade F');
14 end if;
15* end;
16 /
Enter value for tavg: 89
Grade A

PL/SQL procedure successfully completed.

SQL> /
Enter value for tavg: 23
Grade F

PL/SQL procedure successfully completed.

SQL> /
Enter value for tavg: 45
Grade D

PL/SQL procedure successfully completed.

Branching Control Statements:

1. case

syntax

Case <variable/expression>
when <constant> then
<exec-statements>;
when <constant> then
<exec-statements>;
when <constant> then
<exec-statements>;
when <constant> then
<exec-statements>;
else
<exec-statements>;
end case;

ex :
SQL> Declare
2 Color Varchar2(1):='&Color';
3 Begin
4 Case Color
5 When 'R' then
6 Dbms_output.put_line('U r Selected Red');
7 When 'B' then
8 Dbms_output.put_line('U r Selected Blue');
9 When 'Y' then
10 Dbms_output.put_line('U r Selected Yellow');
11 else
12 Dbms_output.put_line('U r Selection is Wrong plz.. Trai Again!!!!!');
13 end case;
14 end;
15 /
Enter value for color: Y
U r Selected Yellow

PL/SQL procedure successfully completed.

SQL> /
Enter value for color: R
U r Selected Red

PL/SQL procedure successfully completed.

SQL> /
Enter value for color: B
U r Selected Blue

PL/SQL procedure successfully completed.

SQL> /
Enter value for color: X
U r Selection is Wrong plz.. Trai Again!!!!!

PL/SQL procedure successfully completed.

Iteration Control Statements:

1. Simple Loop
2. While Loop
3. For Loop
4. For cursor

1. Simple Loop :
-> it is an infinite loop
syntax:
Loop
<exec-statements>;
End loop;

ex:
Begin
Loop
dbms_output.put_line('Welcome');
End loop;
end;

How to break simple loop:

2 ways :

1. if <condition> then
exit;
end if;

ex:

Declare
I number(2):=1;
Begin
Loop
if i>10 then
exit;
end if;
dbms_output.put_line('Welcome');
i:=i+1;
End loop;
end;
/
Welcome
Welcome
Welcome
Welcome
Welcome
Welcome
Welcome
Welcome
Welcome
Welcome

2. Exit when <condition>;

ex:
Declare
i number(2):=1;
Begin
Loop
Exit when i>10;
dbms_output.put_line('Welcome');
i:=i+1;
End loop;
end;
/
Welcome
Welcome
Welcome
Welcome
Welcome
Welcome
Welcome
Welcome
Welcome
Welcome

2. While Loop

syntax:

While <condition>
loop
<exec-statements>;
incre/decre;
end loop;

ex:
SQL> Declare
2 i Number(2):=1;
3 Begin
4 While(i<=10)
5 Loop
6 dbms_output.put_line(i);
7 i:=i+1;
8 End loop;
9 End;
10 /
1
2
3
4
5
6
7
8
9
10

PL/SQL procedure successfully completed.

write a pl/sql block for to print multiplication table.

SQL> Declare
2 N number(2):=&n;
3 i Number(2):=1;
4 Begin
5 while(i<=10)
6 Loop
7 dbms_output.put_line(N||'*'||i||'='||(N*i));
8 i:=i+1;
9 End loop;
10 End;
11 /
Enter value for n: 5
5*1=5
5*2=10
5*3=15
5*4=20
5*5=25
5*6=30
5*7=35
5*8=40
5*9=45
5*10=50

PL/SQL procedure successfully completed.

NESTED WHILE LOOP:

DECLARE
I NUMBER(2):=1;
J NUMBER(2);
RESULT VARCHAR2(100);
BEGIN
WHILE I<=5
LOOP
J:=1;
WHILE J<=I
LOOP
RESULT:=RESULT||J||' ';
J:=J+1;
END LOOP;
DBMS_OUTPUT.PUT_LINE(RESULT);
RESULT:=NULL;
I:=I+1;
END LOOP;
END;
/

1
1 2
1 2 3
1 2 3 4
1 2 3 4 5

3. FOR LOOP:
-> by default increment by 1

Syntax:

FOR <index_variable> in <start value>..<end value>


loop
<exec-statements>;
end loop;

ex:

1 Begin
2 For i in 1..10
3 loop
4 dbms_output.put_line(i);
5 end loop;
6* end;
SQL> /
1
2
3
4
5
6
7
8
9
10

PL/SQL procedure successfully completed.

1 Begin
2 For i in reverse 1..10
3 loop
4 dbms_output.put_line(i);
5 end loop;
6* end;
SQL> /
10
9
8
7
6
5
4
3
2
1

NESTED FOR LOOP

SQL> DECLARE
2 RESULT VARCHAR2(100);
3 BEGIN
4 FOR I IN 1..5
5 LOOP
6 FOR J IN 1..I
7 LOOP
8 RESULT:=RESULT||J||' ';
9 END LOOP;
10 DBMS_OUTPUT.PUT_LINE(RESULT);
11 RESULT:=NULL;
12 END LOOP;
13 END;
14 /
1
1 2
1 2 3
1 2 3 4
X
PL/SQL procedure successfully completed.

1 DECLARE
2 RESULT VARCHAR2(100);
3 BEGIN
4 FOR I IN REVERSE 1..5
5 LOOP
6 FOR J IN 1..I
7 LOOP
8 RESULT:=RESULT||J||' ';
9 END LOOP;
10 DBMS_OUTPUT.PUT_LINE(RESULT);
11 RESULT:=NULL;
12 END LOOP;
13* END;
SQL> /
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1

PL/SQL procedure successfully completed.

4. For Cursor:

DECLARE
E EMP%ROWTYPE;
BEGIN
SELECT * INTO E FROM EMP WHERE DEPTNO=&DEPTNO;
DBMS_OUTPUT.PUT_LINE(E.EMPNO||E.ENAME||E.SAL||E.DEPTNO);
END;

Enter value for deptno: 10


DECLARE
*
ERROR at line 1:
ORA-01422: exact fetch returns more than requested number of rows
ORA-06512: at line 4

CURSORS:

-> It is used to store transactional data


-> it creates temporary buffer.
-> it is not stored permanently in database.
-> when select statements retrieves more than one row, on that time
we can use this cursors.

2 types of cursors

1. explicit cursors -> it is created by user


2. implicit cursors -> it is created by oracle

1. explicit cursors:

cursor operations:

1. declaring cursor:

cursor <cursor_name> is <select statement>;

-> it declares the cursor


2. open <cursor_name>;

-> it opens the cursor,


-> memory is allocated after opened.

3. fetch <cursor_name> into <pl/sql variables>;

-> it fetches rows from cursor to pl/sql variables


-> fetch statement fetches one row at a time.

4. close <cursor_name>;

-> it closes the cursor


-> memory alloted, will be deallocated.

cursor attributes:

-> it shows status of the cursor

syntax:

<cursor_name>%attribute;

1. %isopen

-> it returns true when cursors opens successfully

2. %found :

-> it returns true, when cursor contains data

3.%notfound:

-> it returns true, when cursor doesn't find any data

4. %rowcount:

-> it return number

-> no.of fetch statement executed.

EXAMPLE :

1 DECLARE
2 CURSOR EMP_CUR IS SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP WHERE
DEPTNO=&DEPTNO;
3 TEMPNO EMP.EMPNO%TYPE;
4 TENAME EMP.ENAME%TYPE;
5 TSAL EMP.SAL%TYPE;
6 TDEPTNO EMP.DEPTNO%TYPE;
7 BEGIN
8 OPEN EMP_CUR;
9 IF EMP_CUR%ISOPEN THEN
10 DBMS_OUTPUT.PUT_LINE('CURSOR OPENS SUCCESSFULLY');
11 END IF;
12 FETCH EMP_CUR INTO TEMPNO,TENAME,TSAL,TDEPTNO;
13 DBMS_OUTPUT.PUT_LINE(TEMPNO||' '||TENAME||' '||TSAL||' '||TDEPTNO);
14 FETCH EMP_CUR INTO TEMPNO,TENAME,TSAL,TDEPTNO;
15 DBMS_OUTPUT.PUT_LINE(TEMPNO||' '||TENAME||' '||TSAL||' '||TDEPTNO);
16 FETCH EMP_CUR INTO TEMPNO,TENAME,TSAL,TDEPTNO;
17 DBMS_OUTPUT.PUT_LINE(TEMPNO||' '||TENAME||' '||TSAL||' '||TDEPTNO);
18* END;
19 /
Enter value for deptno: 20
CURSOR OPENS SUCCESSFULLY
7369 SMITH 800 20
7566 JONES 2975 20
7788 SCOTT 3000 20

DECLARE
CURSOR EMP_CUR IS SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP WHERE DEPTNO=&DEPTNO;
E EMP_CUR%ROWTYPE;
BEGIN
OPEN EMP_CUR;
IF EMP_CUR%ISOPEN THEN
DBMS_OUTPUT.PUT_LINE('CURSOR OPENS SUCCESSFULLY');
END IF;
LOOP
FETCH EMP_CUR INTO E;
EXIT WHEN EMP_CUR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(E.EMPNO||' '||E.ENAME||' '||E.SAL||' '||E.DEPTNO);
END LOOP;
DBMS_OUTPUT.PUT_LINE(EMP_CUR%ROWCOUNT||' rows selected');
CLOSE EMP_CUR;
END;

SQL> /
Enter value for deptno: 10
CURSOR OPENS SUCCESSFULLY
7782 CLARK 2450 10
7839 KING 5000 10
7934 MILLER 1300 10
3 rows selected

CURSOR WITH PARAMETERS:

DECLARE
CURSOR EMP_CUR(PDEPTNO NUMBER)
IS SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP
WHERE DEPTNO=PDEPTNO;
E EMP_CUR%ROWTYPE;
BEGIN
OPEN EMP_CUR(&DEPTNO);
IF EMP_CUR%ISOPEN THEN
DBMS_OUTPUT.PUT_LINE('CURSOR OPENS SUCCESSFULLY');
END IF;
LOOP
FETCH EMP_CUR INTO E;
EXIT WHEN EMP_CUR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(E.EMPNO||' '||E.ENAME||' '||E.SAL||' '||E.DEPTNO);
END LOOP;
DBMS_OUTPUT.PUT_LINE(EMP_CUR%ROWCOUNT||' rows selected');
CLOSE EMP_CUR;
END;
SQL> /
Enter value for deptno: 30
CURSOR OPENS SUCCESSFULLY
7499 ALLEN 1600 30
7521 WARD 1250 30
7654 MARTIN 1250 30
7698 BLAKE 2850 30
7844 TURNER 1500 30
7900 JAMES 950 30
6 rows selected

NESTED CURSORS :

-> CURSOR WITHIN CURSOR

1 DECLARE
2 CURSOR DEPT_CUR IS SELECT * FROM DEPT;
3 CURSOR EMP_CUR(PDEPTNO NUMBER) IS SELECT * FROM EMP
4 ZWHERE DEPTNO=PDEPTNO;
5 D DEPT_CUR%ROWTYPE;
6 E EMP_CUR%ROWTYPE;
7 BEGIN
8 OPEN DEPT_CUR;
9 IF DEPT_CUR%ISOPEN THEN
10 DBMS_OUTPUT.PUT_LINE('DEPT CURSOR OPEN SUCCESSFULLY');
11 END IF;
12 LOOP
13 FETCH DEPT_CUR INTO D;
14 EXIT WHEN DEPT_CUR%NOTFOUND;
15 OPEN EMP_CUR(D.DEPTNO);
16 IF EMP_CUR%ISOPEN THEN
17 DBMS_OUTPUT.PUT_LINE('EMP CURSOR OPEN SUCCESSFULLY');
18 END IF;
19 LOOP
20 FETCH EMP_CUR INTO E;
21 EXIT WHEN EMP_CUR%NOTFOUND;
22 DBMS_OUTPUT.PUT_LINE(E.EMPNO||' '||E.ENAME||' '||E.SAL||' '||E.DEPTNO
23 ||' '||D.DEPTNO||' '||D.DNAME||' '||D.LOC);
24 END LOOP;
25 IF EMP_CUR%ROWCOUNT=0 THEN
26 DBMS_OUTPUT.PUT_LINE('NO EMPLOYEES ARE WORKING IN '||D.DEPTNO||'
DEPARTMENT');
27 END IF;
28 CLOSE EMP_CUR;
29
DBMS_OUTPUT.PUT_LINE('---------------------------------------------------');
30 END LOOP;
31 CLOSE DEPT_CUR;
32* END;
SQL> /
DEPT CURSOR OPEN SUCCESSFULLY
EMP CURSOR OPEN SUCCESSFULLY
7782 CLARK 2450 10 10 ACCOUNTING NEW YORK
7839 KING 5000 10 10 ACCOUNTING NEW YORK
7934 MILLER 1300 10 10 ACCOUNTING NEW YORK
---------------------------------------------------
EMP CURSOR OPEN SUCCESSFULLY
7369 SMITH 800 20 20 RESEARCH DALLAS
7566 JONES 2975 20 20 RESEARCH DALLAS
7788 SCOTT 3000 20 20 RESEARCH DALLAS
7876 ADAMS 1100 20 20 RESEARCH DALLAS
7902 FORD 3000 20 20 RESEARCH DALLAS
---------------------------------------------------
EMP CURSOR OPEN SUCCESSFULLY
7499 ALLEN 1600 30 30 SALES CHICAGO
7521 WARD 1250 30 30 SALES CHICAGO
7654 MARTIN 1250 30 30 SALES CHICAGO
7698 BLAKE 2850 30 30 SALES CHICAGO
7844 TURNER 1500 30 30 SALES CHICAGO
7900 JAMES 950 30 30 SALES CHICAGO
---------------------------------------------------
EMP CURSOR OPEN SUCCESSFULLY
NO EMPLOYEES ARE WORKING IN 40 DEPARTMENT
---------------------------------------------------

PL/SQL procedure successfully completed.

2. IMPLICIT CURSORS:
X

SQL> BEGIN
2 DELETE FROM EMP WHERE DEPTNO=&DEPTNO;
3 IF SQL%ROWCOUNT>3 THEN
4 ROLLBACK;
5 ELSE
6 COMMIT;
7 DBMS_OUTPUT.PUT_LINE('ROWS DELETED SUCCESSFULLY');
8 END IF;
9 END;
10 /
Enter value for deptno: 20

PL/SQL procedure successfully completed.

SQL> 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
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
7788 SCOTT ANALYST 7566 19-APR-87 3000
20
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
7902 FORD ANALYST 7566 03-DEC-81 3000
20

11 rows selected.

FOR CURSOR:
1 DECLARE
2 CURSOR EMP_CUR IS SELECT * FROM EMP;
3 BEGIN
4 FOR I IN EMP_CUR
5 LOOP
6 DBMS_OUTPUT.PUT_LINE(I.EMPNO||' '||I.ENAME||' '||I.SAL||I.DEPTNO);
7 END LOOP;
8* END;

SQL> /
7369 SMITH 80020
7499 ALLEN 160030
7521 WARD 125030
7566 JONES 297520
7654 MARTIN 125030
7698 BLAKE 285030
7788 SCOTT 300020
7844 TURNER 150030
7876 ADAMS 110020
7900 JAMES 95030
7902 FORD 300020

Wrote file afiedt.buf

1 BEGIN
2 FOR I IN (SELECT * FROM EMP)
3 LOOP
4 DBMS_OUTPUT.PUT_LINE(I.EMPNO||' '||I.ENAME||' '||I.HIREDATE||' '||I.SAL||
' '||I.DEPTNO);
5 END LOOP;
6* END;
SQL> /
7369 SMITH 17-DEC-80 800 20
7499 ALLEN 20-FEB-81 1600 30
7521 WARD 22-FEB-81 1250 30
7566 JONES 02-APR-81 2975 20
7654 MARTIN 28-SEP-81 1250 30
7698 BLAKE 01-MAY-81 2850 30
7788 SCOTT 19-APR-87 3000 20
7844 TURNER 08-SEP-81 1500 30
7876 ADAMS 23-MAY-87 1100 20
7900 JAMES 03-DEC-81 950 30
7902 FORD 03-DEC-81 3000 20

PL/SQL procedure successfully completed.


EXCEPTIONS :

-> PL/SQL ERRORS IS TERMED AS EXCEPTIONS

TYPES OF EXCEPTIONS:

1. PREDEFINED EXCEPTIONS:

-> DEFINED BY ORACLE


-> ACTIVATED BY ORACLE
-> SOLUTION IS PROVIDED BY USER

2. USER-DEFINED EXCEPTIONS :

-> DEFINED BY USER


-> ACTIVATED BY USER(RAISE STATEMENT)
-> SOLUTION IS PROVIDED BY USER

3. NON-PREDEFINED EXCEPTIONS

-> THESE EXECPTIONS ARE RAISED WHEN CONSTRAINT VOILATED ERRORS

-> DEFINED BY USER

-> ACTIVATED BY ORACLE

-> SOLUTION IS PROVIDED BY USER

1. PREDEFINED EXCEPTIONS :

1 DECLARE
2 E EMP%ROWTYPE;
3 BEGIN
4 SELECT * INTO E FROM EMP WHERE EMPNO=&EMPNO;
5 DBMS_OUTPUT.PUT_LINE(E.EMPNO||' '||E.ENAME||' '||E.JOB||' '||E.SAL||' '||
E.DEPTNO);
6 EXCEPTION
7 WHEN NO_DATA_FOUND THEN
8 DBMS_OUTPUT.PUT_LINE(' NO EMPLOYEES ARE WORING WITH EMPLOYEE NUMBER');
9* END;
SQL> /
Enter value for empno: 7902
7902 FORD ANALYST 3000 20

PL/SQL procedure successfully completed.

Wrote file afiedt.buf

1 DECLARE
2 E EMP%ROWTYPE;
3 BEGIN
4 SELECT * INTO E FROM EMP WHERE DEPTNO=&DEPTNO;
5 DBMS_OUTPUT.PUT_LINE(E.EMPNO||' '||E.ENAME||' '||E.JOB||' '||E.SAL||' '||
E.DEPTNO);
6 EXCEPTION
7 WHEN NO_DATA_FOUND THEN
8 DBMS_OUTPUT.PUT_LINE(' NO EMPLOYEES ARE WORING WITH EMPLOYEE NUMBER');
9 WHEN TOO_MANY_ROWS THEN
10 DBMS_OUTPUT.PUT_LINE(' MORETHAN ONE EMPLOYEE EXISTS ');
11* END;
SQL> /
Enter value for deptno: 20
MORETHAN ONE EMPLOYEE EXISTS

PL/SQL procedure successfully completed.

SQL> /
Enter value for deptno: 60
NO EMPLOYEES ARE WORING WITH EMPLOYEE NUMBER

PL/SQL procedure successfully completed.

2. USER DEFINED EXCEPTIONS:

SQL> DECLARE
2 VALUE_MISSING EXCEPTION; -- EXCEPTION NAME
3 A NUMBER(2):=&A;
4 B NUMBER(2):=&B;
5 C NUMBER(4);
6 BEGIN
7 IF A IS NULL OR B IS NULL THEN
8 RAISE VALUE_MISSING; -- CALLING EXCEPTION
9 END IF;
10 C:=A+B;
11 DBMS_OUTPUT.PUT_LINE('ADD OF TWO NUMBERS : '||C);
12 EXCEPTION
13 WHEN VALUE_MISSING THEN
14 DBMS_OUTPUT.PUT_LINE(' COLUMN VALUES ARE MANDATORY ');
15 END;
16 /
Enter value for a: 10
Enter value for b: 20
ADD OF TWO NUMBERS : 30

PL/SQL procedure successfully completed.

SQL>
SQL> /
Enter value for a: NULL
Enter value for b: 30
COLUMN VALUES ARE MANDATORY

PL/SQL procedure successfully completed.

3. NON-PREDEFINED EXCEPTOINS:

Wrote file afiedt.buf

1 DECLARE
2 DUPLICATE_VALUES EXCEPTION;
3 PRAGMA EXCEPTION_INIT(DUPLICATE_VALUES,-00001); --> IT RAISES EXPCEPTION
BASED ON ERROR NUMBER.
4 BEGIN
5 INSERT INTO DEPT VALUES(&DEPTNO,'&DNAME','&LOC');
6 EXCEPTION
7 WHEN DUPLICATE_VALUES THEN
8 DBMS_OUTPUT.PUT_LINE('DUPLICATE VALUES ARE NOT ACCEPTED');
9* END;
SQL> /
Enter value for deptno: 10
Enter value for dname: AAAA
Enter value for loc: TTTT
DUPLICATE VALUES ARE NOT ACCEPTED

PL/SQL procedure successfully completed.

SQL> SELECT * FROM DEPT;

DEPTNO DNAME LOC


---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

COMPOSITE DATATYPES:
Composite Datatypes:

? User defined Datatypes


? Created by user in PL/SQL Block
? Valid in PL/SQL only
? They are not stored in database
? They are not Re-usable & Shared
? They will not hold data
? They improve performance of Oracle while Manipulating data in PL/SQL block

2 types

1. PL/SQL Record
2. PL/SQL Table

1. PL/SQL Record
i. It is an collect of elements of �different data types� and stored at �one
location�
ii. it is similar to �C� structure

Syntax:

Type <recordname> is record


( Element1 datatype,
Element2 datatype,
�������..,
ElementN datatype);

2. PL/SQL Table

i. It is an collect of elements of �same data type� and stored in �Continuous


Memory location�
ii. it is similar to �C� arrays

Syntax:

Type <table name> is table of <data type> index by Binary_integer;

PL/SQL Block using PL/SQL Records:

ED
SQL> /
Enter value for employid: 7788
7788 SCOTT 3000 750 1050 4504350

PL/SQL procedure successfully completed.

-- PL/SQL Block using PL/SQL Table:

SQL> Declare
2 Type Name is Table of Emp.Ename%type index by Binary_Integer;
3 Type Pay is Table of Emp.sal%type index by Binary_Integer;
4 N Name;
5 P Pay;
6 Ctr Number(3):=0;
7 Totsal Number(9,2):=0;
8 Begin
9 -- Filling PL/SQL table
10 For I in (Select ename,sal from emp)
11 Loop
12 N(ctr):=i.ename;
13 P(ctr):=i.sal;
14 Ctr:=Ctr+1;
15 End Loop;
16 -- Printing Table Contents
17 For K in 0..N.count-1
18 Loop
19 Dbms_output.put_line(N(k)||' '||P(k));
20 Totsal:= Totsal + Nvl(P(k),0);
21 End Loop;
22 Dbms_output.put_line('Total Salary is '|| Totsal);
23 End;
24 /
ALLEN 1600
WARD 1250
JONES 2975
MARTIN 1250
BLAKE 2850
SCOTT 3000
TURNER 1500
ADAMS 1100
JAMES 950
FORD 3000

TRIGGERS :
Triggers:

? A set of PL/SQL statements stored permanently in database and �Automatically�


activated
when ever an Even Raising statement(DML) is performed.
? They are used to impose user defined Restrictions(or)Business Rules on
Tables.
? They are also activated when Tables are manipulated by other users or by
other application S/w tools.
? They provide High Security on tables
? They are stored in �USER_TRIGGERS� system table

Trigger Parts:

1. Trigger Event :

Indicates when to activate the Trigger

Before
Insert, Update, Delete = 6 Events
After

2. Trigger Type :

Indicate the type of Trigger

a. Row Trigger : Trigger is activated for Every Row manipulated by DML


statement.
b. Statement Trigger: Trigger is activated only once for 1 DML statement

3. Trigger Restriction :

Supports to stop the Trigger Execution based on condition

4. Trigger Body :

A set of PL/SQL statements.

Syntax:

Create or Replace Trigger <Trigger_name>


Before/After insert or update OR delete ? (1)
[ of <columns> ] on <table name>
[ for each row ? (2)
When <condition> (TRUE -> Executes the trigger, FALSE ? Not execute)

Declare
<variable declaration>; ]
Begin
<exec statements>;
[ Exception
<exec statements>; ]
End;
SQL> CREATE OR REPLACE TRIGGER DEPT_TRIG
2 BEFORE INSERT ON DEPT
3 FOR EACH ROW
4 BEGIN
5 :NEW.DNAME:=UPPER(:NEW.DNAME); -- :NEW.DNAME -> BIND VARIABLE
6 END;
7 /

Trigger created.

SQL> INSERT INTO DEPT VALUES(50,'finance','HYD');

1 row created.

SQL> SELECT * FROM DEPT;

DEPTNO DNAME LOC


---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 FINANCE HYD

TRIGGER FOR TO TAKE BACKUP

COPIENG TABLE:

CREATE TABLE BACKUP AS SELECT * FROM EMP [ WHERE 1=1; ]

-> IT COPIES STRUCTURES WITH DATA

CREATE TABLE BACKUP AS SELECT * FROM EMP WHERE 1=2;

-> IT COPIES ONLY STRUCTURE

SQL> CREATE OR REPLACE TRIGGER BACKUP_TRIG


2 AFTER DELETE ON EMP
3 FOR EACH ROW
4 BEGIN
5 INSERT INTO BACKUP
VALUES(:OLD.EMPNO,:OLD.ENAME,:OLD.JOB,:OLD.MGR,:OLD.HIREDATE,
6 :OLD.SAL,:OLD.COMM,:OLD.DEPTNO);
7 END;
8 /

Trigger created.

SQL> DELETE FROM EMP WHERE EMPNO=7369;

1 row deleted.

SQL> SELECT * FROM EMP;

EMPNO ENAME JOB MGR HIREDATE SAL COMM


DEPTNO
---------- ---------- --------- ---------- --------- ---------- ----------
----------
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300
30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500
30
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
7788 SCOTT ANALYST 7566 19-APR-87 3000
20
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
7902 FORD ANALYST 7566 03-DEC-81 3000
20

10 rows selected.

SQL> SELECT * FROM BACKUP;

EMPNO ENAME JOB MGR HIREDATE SAL COMM


DEPTNO
---------- ---------- --------- ---------- --------- ---------- ----------
----------
7369 SMITH CLERK 7902 17-DEC-80 800
20

SQL> DELETE FROM EMP WHERE DEPTNO=30;

6 rows deleted.

SQL> SELECT * FROM BACKUP;

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
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400
30
7698 BLAKE MANAGER 7839 01-MAY-81 2850
30
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0
30
7900 JAMES CLERK 7698 03-DEC-81 950
30
7 rows selected.

SQL> SELECT * FROM EMP;

EMPNO ENAME JOB MGR HIREDATE SAL COMM


DEPTNO
---------- ---------- --------- ---------- --------- ---------- ----------
----------
7566 JONES MANAGER 7839 02-APR-81 2975
20
7788 SCOTT ANALYST 7566 19-APR-87 3000
20
7876 ADAMS CLERK 7788 23-MAY-87 1100
20
7902 FORD ANALYST 7566 03-DEC-81 3000
20

STATEMENT LEVEL TRIGGERS:

1 CREATE OR REPLACE TRIGGER HOLI_TRIG


2 BEFORE INSERT OR UPDATE OR DELETE ON EMP
4 DECLARE
5 CNT NUMBER(2);
6 BEGIN
7 IF TO_CHAR(SYSDATE,'HH24') NOT IN (10,11,12,13,14,15,16,17) THEN
8 RAISE_APPLICATION_ERROR(-20001,'OFF TIMINGS TRANSACTIONS ARE
9 ALLOWED');
10 END IF;
11 IF TO_CHAR(SYSDATE,'DY') IN ('SAT','SUN') THEN
12 RAISE_APPLICATION_ERROR(-20002,'WEEK ENDS TRANSACTIONS ARE N
13 ALLOWED');
14 END IF;
15 SELECT COUNT(HDATE) INTO CNT FROM HOLIDAY
16 WHERE TO_CHAR(SYSDATE,'DD-MON-YY')=
17 TO_CHAR(HDATE,'DD-MON-YY');
18 IF CNT>0 THEN
19 RAISE_APPLICATION_ERROR(-20003,'TODAY HOLIDAY TRANSACTIONS ARE
20 ALLOWED');
21 END IF;
22* END;
SQL> /

Trigger created.

SQL> INSERT INTO EMP (EMPNO,ENAME,SAL,DEPTNO) VALUES(1,'AAAA',7000,10);


INSERT INTO EMP (EMPNO,ENAME,SAL,DEPTNO) VALUES(1,'AAAA',7000,10)
*
ERROR at line 1:
ORA-20002: WEEK ENDS TRANSACTIONS ARE NOT
ALLOWED
ORA-06512: at "SCOTT.HOLI_TRIG", line 9
ORA-04088: error during execution of trigger 'SCOTT.HOLI_TRIG'

SQL> INSERT INTO EMP (EMPNO,ENAME,SAL,DEPTNO) VALUES(1,'AAAA',7000,10);


1 row created.

SQL> INSERT INTO EMP (EMPNO,ENAME,SAL,DEPTNO) VALUES(1,'AAAA',7000,10);


INSERT INTO EMP (EMPNO,ENAME,SAL,DEPTNO) VALUES(1,'AAAA',7000,10)
*
ERROR at line 1:
ORA-20003: TODAY HOLIDAY TRANSACTIONS ARE NOT
ALLOWED
ORA-06512: at "SCOTT.HOLI_TRIG", line 16
ORA-04088: error during execution of trigger 'SCOTT.HOLI_TRIG'

BANK APPLICATION TRIGGER :

CREATE OR REPLACE TRIGGER BANK_TRIG1


BEFORE INSERT ON BANK FOR EACH ROW
BEGIN
IF :NEW.ACC_TYPE='S' THEN
IF :NEW.BAL<500 THEN
RAISE_APPLICATION_ERROR(-20001,'SAVING A/C BALANCE MINIMUM
RS.500/-');
END IF;
ELSIF :NEW.ACC_TYPE='C' THEN
IF :NEW.BAL<1000 THEN
RAISE_APPLICATION_ERROR(-20002,'CURRENT A/C BALANCE MINIMUM RS.
1000/-');
END IF;
ELSE
RAISE_APPLICATION_ERROR(-20003,'INVALID ACCOUNT TYPE, TRY
AGAIN!!!!!');
END IF;
SELECT NVL(MAX(ACCNO),0)+1 INTO :NEW.ACCNO FROM BANK;
END;

SCHEMA LEVEL TRIGGERS:(LOGON)

SQL>
1 CREATE OR REPLACE TRIGGER LOGON_TRIG
2 AFTER LOGON ON SCHEMA
3 BEGIN
4 INSERT INTO LOG_BOOK VALUES(USER,SYSDATE);
5* END;

SQL> SELECT * FROM LOG_BOOK;

UNAME
----------
LOGON_TIME
-------------------------------------------------------------
SCOTT
26-JAN-09 01.54.11.000000 PM

LOGOFF TRIGGER:

CREATE OR REPLACE TRIGGER LOGOFF_TRIG


2 BEFORE LOGOFF ON SCHEMA
3 BEGIN
4 INSERT INTO LOG_BOOK VALUES(USER,SYSDATE);
5* END;

SEE THE TRIGGER NAMES ON PARTICULAR TABLE

SELECT TRIGGER_NAME FROM USER_TRIGGERS WHERE TABLE_NAME='EMP'

DROPPING TRIGGERS:

DROP TRIGGER <TRIGGER_NAME>;

DROP TRIGGER LOGOFF_TRIG;

SUB PROGRAMS :

SUB PROGRAMS:

-> A SET OF PL/SQL STATEMENTS STORED PERMANENTLY IN DATABASE AND


PERFORMS A TASK.

-> THEY ACCEPT ARGUMENTS WHILE EXECUTION

-> THEY ARE STORED IN 'COMPILED FORMAT';

-> THEY ARE REUSABLE COMPONENTS

-> THEY PROVIDES MODULARITY

MODULARITY

-> A HUGE PROGRAM DEVIDED INTO SUB TASKS

-> EASY TO UNDERSTAND

-> EASY TO DEBUG THE ERRORS

1. PROCEDURES

-> Procedures are may/may not return value

2. FUNCTIONS

-> Functions should return value

Procedure syntax:

Create or Replace Procedure <Procedure_name>


[ (argument mode datatype,....)]
is
<variable declaration>;
Begin
<exec statements.;
[ Exception Block
<exec-statements>; ]
end;

Function Syntax :

Create or Replace Function <function_name>


[(arguments mode datatype,....) ]
RETURN <data_type>

is
<variable declaration>;
Begin
<exec-statements>;

[Exception Block

<exec-statements>; ]
End;

PROCEDURES:

PROCEDURE WITHOUT ARGUMENTS:

Enter value for a: 10


old 3: A NUMBER(2):=&A;
new 3: A NUMBER(2):=10;
Enter value for b: 20
old 4: B NUMBER(2):=&B;
new 4: B NUMBER(2):=20;

Procedure created.

TO EXECUTE THE PROCEDURE

SQL> EXEC MY_PROC;

PL/SQL procedure successfully completed.

SQL> SET SERVEROUTPUT ON


SQL> EXEC MY_PROC;
RESULT =30

PL/SQL procedure successfully completed.

SQL> EXEC MY_PROC;


RESULT =30

PL/SQL procedure successfully completed.

SQL>
PROCEDURE WITH PARAMETERS:

1 CREATE OR REPLACE PROCEDURE MY_PROC(A NUMBER, B NUMBER)


2 IS
3 C NUMBER(4);
4 BEGIN
5 C:=A+B;
6 DBMS_OUTPUT.PUT_LINE('RESULT ='||C);
7* END;
SQL> /

Procedure created.

SQL> EXEC MY_PROC(50,20);


RESULT =70

PL/SQL procedure successfully completed.

1 CREATE OR REPLACE PROCEDURE EMP_PROC(TEMPNO EMP.EMPNO%TYPE)


2 IS
3 E EMP%ROWTYPE;
4 BEGIN
5 SELECT * INTO E FROM EMP WHERE EMPNO=TEMPNO;
6 DBMS_OUTPUT.PUT_LINE(E.EMPNO||' '||E.ENAME||' '||E.SAL||' '||E.DEPTNO);
7* END;
SQL> /

Procedure created.

SQL> EXEC EMP_PROC(7902);


7902 FORD 3000 20

PL/SQL procedure successfully completed.

SQL> EXEC EMP_PROC(7788);


7788 SCOTT 3000 20

PL/SQL procedure successfully completed.

SQL>

1 CREATE OR REPLACE PROCEDURE BANK_PROC(TACCNO BANK.ACCNO%TYPE,


2 TCNAMe BANK.CNAME%TYPE,
3 TACC_TYPE BANK.ACC_TYPE%TYPE,
4 TBAL BANK.BAL%TYPE)
5 IS
6 BEGIN
7 IF TACC_TYPE='S' THEN
8 IF TBAL<500 THEN
9 RAISE_APPLICATION_ERROR(-20001,'SAVINGS A/C Minimum Balance 500');
10 END IF;
11 ELSIF TACC_TYPE='C' THEN
12 IF TBAL<1000 THEN
13 RAISE_APPLICATION_ERROR(-20002,'Current A/C Minimum Balance
1000');
14 End if;
15 else
16 RAISE_APPLICATION_ERROR(-20003,'Invalid Account Type');
17 end if;
18 insert into bank values(taccno,tcname,tacc_type,tbal);
19 commit;
20* end;
21 /

Procedure created.

SQL> EXEC BANK_PROC(100,'KIRAN','S',1500);

PL/SQL procedure successfully completed.

SQL> SELECT * FROM BANK;

ACCNO CNAME A BAL


---------- ---------- - ----------
100 KIRAN S 1500

SQL> EXEC BANK_PROC(101,'AAA','S',400);


BEGIN BANK_PROC(101,'AAA','S',400); END;

*
ERROR at line 1:
ORA-20001: SAVINGS A/C Minimum Balance 500
ORA-06512: at "SCOTT.BANK_PROC", line 9
ORA-06512: at line 1

SQL> EXEC BANK_PROC(101,'AAA','C',800);


BEGIN BANK_PROC(101,'AAA','C',800); END;

*
ERROR at line 1:
ORA-20002: Current A/C Minimum Balance 1000
ORA-06512: at "SCOTT.BANK_PROC", line 13
ORA-06512: at line 1

SQL> EXEC BANK_PROC(101,'AAA','C',1000);

PL/SQL procedure successfully completed.

SQL> EXEC BANK_PROC(102,'BBB',D',3000);


ERROR:
ORA-01756: quoted string not properly terminated

SQL> EXEC BANK_PROC(102,'BBB','D',3000);


BEGIN BANK_PROC(102,'BBB','D',3000); END;

*
ERROR at line 1:
ORA-20003: Invalid Account Type
ORA-06512: at "SCOTT.BANK_PROC", line 16
ORA-06512: at line 1
SQL> SELECT * FROM BANK;

ACCNO CNAME A BAL


---------- ---------- - ----------
100 KIRAN S 1500
101 AAA C 1000

SQL>

ARGUMENTS MODES

IN -> IT ACCEPTS INPUT INTO SUBPROGRAM(DEFAULT)

OUT -> RETURNS OUTPUT THROUGH SUBPGRAM

IN OUT -> BOTH

IN:

SQL> CREATE OR REPLACE PROCEDURE IN_PROC(A IN NUMBER, B IN NUMBER)


2 IS
3 C NUMBER(4);
4 BEGIN
5 C:=A+B;
6 DBMS_OUTPUT.PUT_LINE('RESULT ='||C);
7 END;
8 /

Procedure created.

SQL> EXEC IN_PROC(10,40);


RESULT =50

PL/SQL procedure successfully completed.

SQL>

OUT :

1 CREATE OR REPLACE PROCEDURE MY_PROC(A IN NUMBER, B IN NUMBER, C


2 IS
3 BEGIN
4 C:=A+B;
5* END;
SQL> /

Procedure created.

SQL> EXEC MY_PROC(10,20,C);


BEGIN MY_PROC(10,20,C); END;
*
ERROR at line 1:
ORA-06550: line 1, column 21:
PLS-00201: identifier 'C' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

SQL> VAR C NUMBER;


SQL> EXEC MY_PROC(10,20,:C);

PL/SQL procedure successfully completed.

SQL> PRINT :C

C
----------
30

SQL> DECLARE
2 C NUMBER(4);
3 BEGIN
4 MY_PROC(&A,&B,C);
5 DBMS_OUTPUT.PUT_LINE('RSULT ='||C);
6 END;
7 /
Enter value for a: 40
Enter value for b: 60
old 4: MY_PROC(&A,&B,C);
new 4: MY_PROC(40,60,C);
RSULT =100

PL/SQL procedure successfully completed.

IN OUT :

SQL> CREATE OR REPLACE PROCEDURE MY_PROC(A IN OUT NUMBER)


2 IS
3 BEGIN
4 A:=A*A*A;
5 END;
6 /

Procedure created.

SQL> VAR A NUMBER;


SQL> EXEC :A:=10;

PL/SQL procedure successfully completed.

SQL> EXEC MY_PROC(:A);

PL/SQL procedure successfully completed.

SQL> PRINT :A

A
----------
1000

DROPPING PROCEDUES :

DROP PROCEDURE <PROCEDURE_NAME>;

DROP PROCEDURE MY_PROC;

SELECT TEXT FROM USER_SOURCE WHERE NAME='MY_PROC';

SELECT * FROM USER_PROCEDURES;

FUNCTIONS:

Wrote file afiedt.buf

1 CREATE OR REPLACE FUNCTION SI(P NUMBER, N NUMBER, R NUMBER)


2 RETURN NUMBER
3 IS
4 RES NUMBER(8,2);
5 BEGIN
6 RES:=(P*N*R)/100;
7 RETURN(RES);
8* END;
SQL> /

Function created.

SQL> SELECT SI(1000,2,10) FROM DUAL;

SI(1000,2,10)
-------------
200

SQL>

FUNCTION FOR CHECK BALANCE USING RETURN TYPE BOOLEAN

1 CREATE OR REPLACE FUNCTION CHK_BAL(TACCNO TRANS.TACCNO%TYPE,TTYPE TRANS.TTYPE


%TYPE,
2 TAMOUNT TRANS.TAMOUNT%TYPE)
3 RETURN BOOLEAN
4 IS
5 TBAL BANK.BAL%TYPE;
6 TACC_TYPE BANK.ACC_TYPE%TYPE;
7 RBAL BANK.BAL%TYPE;
8 BEGIN
9 SELECT ACC_TYPE,BAL INTO TACC_TYPE,TBAL FROM BANK WHERE ACCNO=TACCNO;
10 RBAL:=TBAL-TAMOUNT;
11 IF TTYPE='W' AND TACC_TYPE='S' THEN
12 IF RBAL<500 THEN
13 RETURN(FALSE);
14 ELSE
15 RETURN(TRUE);
16 END IF;
17 ELSIF TTYPE='W' AND TACC_TYPE='C' THEN
18 IF RBAL<1000 THEN
19 RETURN(FALSE);
20 ELSE
21 RETURN(TRUE);
22 END IF;
23 END IF;
24* END;
25 /

Function created.

CALLING FUNCTION:

SQL> BEGIN
2 IF CHK_BAL(&TACCNO,'&TTYPE',&TAMOUNT)=TRUE THEN
3 DBMS_OUTPUT.PUT_LINE('SUFFICIENT BALANCE');
4 ELSE
5 DBMS_OUTPUT.PUT_LINE('INSUFFICIENT BALANCE');
6 END IF;
7 END;
8 /
Enter value for taccno: 100
Enter value for ttype: W
Enter value for tamount: 500
old 2: IF CHK_BAL(&TACCNO,'&TTYPE',&TAMOUNT)=TRUE THEN
new 2: IF CHK_BAL(100,'W',500)=TRUE THEN
SUFFICIENT BALANCE

PL/SQL procedure successfully completed.

SQL> SELECT * FROM BANK;

ACCNO CNAME A BAL


---------- ---------- - ----------
100 KIRAN S 1500
101 AAA C 1000

SQL> BEGIN
2 IF CHK_BAL(&TACCNO,'&TTYPE',&TAMOUNT)=TRUE THEN
3 DBMS_OUTPUT.PUT_LINE('SUFFICIENT BALANCE');
4 ELSE
5 DBMS_OUTPUT.PUT_LINE('INSUFFICIENT BALANCE');
6 END IF;
7 END;
8 /
Enter value for taccno: 100
Enter value for ttype: W
Enter value for tamount: 1400
old 2: IF CHK_BAL(&TACCNO,'&TTYPE',&TAMOUNT)=TRUE THEN
new 2: IF CHK_BAL(100,'W',1400)=TRUE THEN
INSUFFICIENT BALANCE

PL/SQL procedure successfully completed.

NESTED FUNCTIONS :
SQL> CREATE OR REPLACE FUNCTION CHK_VAL(A NUMBER, B NUMBER)
2 RETURN BOOEAN
3 IS
4 BEGIN
5 IF B=0 THEN
6 RETURN(FALSE);
7 ELSE
8 RETURN(TRUE);
9 END IF;
10 EBD;
11 .
SQL> ED
Wrote file afiedt.buf

1 CREATE OR REPLACE FUNCTION CHK_VAL(A NUMBER, B NUMBER)


2 RETURN BOOLEAN
3 IS
4 BEGIN
5 IF B=0 THEN
6 RETURN(FALSE);
7 ELSE
8 RETURN(TRUE);
9 END IF;
10* END;
SQL> /

Function created.

SQL> CREATE OR REPLACE FUNCTION DEVIDE_FUN(A NUMBER, B NUMBER)


2 RETURN NUMBER
3 IS
4 BEGIN
5 IF CHK_VAL(A,B)=TRUE THEN
6 RETURN(A/B);
7 ELSE
8 RETURN(0);
9 END IF;
10 END;
11 /

Function created.

SQL> SELECT DEVIDE_FUN(10,2) FROM DUAL;

DEVIDE_FUN(10,2)
----------------
5

SQL> SELECT DEVIDE_FUN(10,0) FROM DUAL;

DEVIDE_FUN(10,0)
----------------
0

DROP FUNCTION <FUNCTION_NAME>;

DROP FUNCTION CHK_BAL;


PACKAGES :

PACKAGES :

? It is an collection of Variables, Cursors, Procedures & Functions are stored


in one location.
? Easy to share the Subprograms in Application S/w Tools
? They Improve performance while accessing subprograms from client location
? They are stored in �User_Source� system table
? They supports function Overloading, Encapsulation & Databinding
? It has two parts

1. Package Specification :

? It holds the declaration of Variables, Cursors & Subprograms

2. Package Body:

? It holds the body of subprograms

SQL> CREATE OR REPLACE PACKAGE MY_PACK


2 IS
3 PROCEDURE MY_PROC(A NUMBER, B NUMBER);
4 FUNCTION NETSAL(TEMPNO EMP.EMPNO%TYPE) RETURN NUMBER;
5 END;
6 /

Package created.

SQL> CREATE OR REPLACE PACKAGE BODY MY_PACK


2 IS
3 PROCEDURE MY_PROC(A NUMBER, B NUMBER)
4 IS
5 C NUMBER(4);
6 BEGIN
7 C:=A+B;
8 DBMS_OUTPUT.PUT_LINE('RESULT= '||C);
9 END;
10 FUNCTION NETSAL(TEMPNO EMP.EMPNO%TYPE) RETURN NUMBER
11 IS
12 TSAL EMP.SAL%TYPE;
13 TCOMM EMP.COMM%TYPE;
14 NETSAL NUMBER(10,2);
15 BEGIN
16 SELECT SAL,NVL(COMM,0) INTO TSAL,TCOMM FROM EMP WHERE EMPNO=TEMPNO;
17 NETSAL:=TSAL+TCOMM;
18 RETURN(NETSAL);
19 END;
20 END;
21 /

Package body created.

SQL> EXEC MY_PACK.MY_PROC(10,40);


RESULT= 50

PL/SQL procedure successfully completed.


SQL> SELECT MY_PACK.NETSAL(7521) FROM DUAL;

MY_PACK.NETSAL(7521)
--------------------

SQL> SELECT MY_PACK.NETSAL(7902) FROM DUAL;

MY_PACK.NETSAL(7902)
--------------------
3000

1 CREATE OR REPLACE PACKAGE FO_PACK


2 IS
3 FUNCTION ADDVAL(A NUMBER, B NUMBER) RETURN NUMBER;
4 FUNCTION ADDVAL(A NUMBER, B NUMBER, C NUMBER) RETURN NUMBER;
5 FUNCTION ADDVAL(STR1 VARCHAR2,STR2 VARCHAR2) RETURN VARCHAR2;
6 FUNCTION ADDVAL(STR1 VARCHAR2, STR2 VARCHAR2,STR3 VARCHAR2) RETURN VARCHAR2;
7* END;
SQL> /

Package created.

SQL> CREATE OR REPLACE PACKAGE BODY FO_PACK


2 S
3 .
SQL> ED
Wrote file afiedt.buf

1 CREATE OR REPLACE PACKAGE BODY FO_PACK


2 IS
3 FUNCTION ADDVAL(A NUMBER, B NUMBER) RETURN NUMBER
4 IS
5 BEGIN
6 RETURN(A+B);
7 END;
8 FUNCTION ADDVAL(A NUMBER, B NUMBER, C NUMBER) RETURN NUMBER
9 IS
10 BEGIN
11 RETURN(A+B+C);
12 END;
13 FUNCTION ADDVAL(STR1 VARCHAR2, STR2 VARCHAR2) RETURN VARCHAR2
14 IS
15 BEGIN
16 RETURN(STR1||STR2);
17 END;
18 FUNCTION ADDVAL(STR1 VARCHAR2, STR2 VARCHAR2,STR3 VARCHAR2) RETURN VARCHAR2
19 IS
20 BEGIN
21 RETURN(STR1||STR2||STR3);
22 END;
23* END;
24 /

Package body created.


SQL> SELECT FO_PACK.ADDVAL(10,20,30) FROM DUAL;

FO_PACK.ADDVAL(10,20,30)
------------------------
60

SQL> SELECT FO_PACK.ADDVAL('RAMA','KRISHNA') FROM DUAL;

FO_PACK.ADDVAL('RAMA','KRISHNA')
--------------------------------------------------------------------------------
RAMAKRISHNA

SQL> SELECT FO_PACK.ADDVAL(10,20) FROM DUAL;

FO_PACK.ADDVAL(10,20)
---------------------
30

SQL> SELECT FO_PACK.ADDVAL('RAMA','KRISHNA','RAJU') FROM DUAL;

FO_PACK.ADDVAL('RAMA','KRISHNA','RAJU')
--------------------------------------------------------------------------------
RAMAKRISHNARAJU

TO SEE THE PACKAGE INFORMATION

SELECT TEXT FROM USER_SOURCE WHERE NAME='FO_PACK';

DROPPING PACKAGES:

DROP PACKAGE <PACKAGE>;

DROP PACKAGE FO_PACK;

DYNAMIC SQL

1 CREATE OR REPLACE PROCEDURE DDL_PROC(TNAME VARCHAR2)


2 IS
3 BEGIN
4 EXECUTE IMMEDIATE('DROP TABLE '||TNAME);
5* END;
SQL> /

Procedure created.

SQL> EXEC DDL_PROC(EMP);


BEGIN DDL_PROC(EMP); END;

*
ERROR at line 1:
ORA-06550: line 1, column 16:
PLS-00357: Table,View Or Sequence reference 'EMP' not allowed in this context
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
SQL> EXEC DDL_PROC('EMP');

PL/SQL procedure successfully completed.

SQL> DESC EMP;


ERROR:
ORA-04043: object EMP does not exist

REF CURSOR:

Ref Cursor :

� Dynamic Cursors
� Supports to define cursor without any select statement
� Select statement will be provided while opening the Cursor

Syntax:

Type <Ref Cursor Name> is <Ref Cursor>;

Ex:

Create Package p1
as
type Rcur is Ref Cursor;
End p1;

** Procedure Returning Multiple Rows thrOUGH out parameter

Create Procedure Get_info(Vdeptno in Number,


Pcur out P1.Rcur)
Is
Begin
Open Pcur for Select empno,ename,job,sal,deptno from
Emp where deptno=vdeptno;
End;

PL/SQL block using Procedure :

Declare
Vcur P1.Rcur;
Veno emp.empno%type;
Vename emp.ename%type;
Vjob emp.job%type;
Vsal emp.sal%type;
Vdeptno emp.deptno%type;
Begin
Get_info(30,Vcur);
Loop
Fetch vcur into veno,vename,vjob,vsal,vdeptno;
Exit when vcur%notfound;
Dbms_output.put_line(veno||' '||vEname||' '||vsal||' '||vjob);
End loop;
Close Vcur;
End;
/

SQL> set serveroutput on


SQL> /
7698 BLAKE 2850 MANAGER
7654 MARTIN 1250 SALESMAN
7499 ALLEN 1600 SALESMAN
7844 TURNER 1500 SALESMAN
7900 JAMES 950 CLERK
7521 WARD 1250 SALESMAN

PL/SQL procedure successfully completed.

PARTITIONS

-> Supports to divide huge tables into logical partitions to improve performance
while retrieving / manipulating data.

Partitioning Methods

There are several partitioning methods offered by Oracle Database:

- Range partitioning
- Hash partitioning
- List partitioning

Range Partitioning

Use range partitioning to map rows to partitions based on ranges of column values.

SQL> create table emp345


(empno number(3) primary key,
ename varchar2(30),
sal number(8,2),
deptno number(2))
Partition by range (deptno)
(Partition p1 values less than (10),
Partition p2 values less than (20),
Partition p3 values less than (30),
Partition p4 values less than (40))

SQL> CREATE TABLE EMP007(EMPNO NUMBER(2),ENAME VARCHAR2(10),SAL NUMBER(8,2))


2 PARTITION BY RANGE(EMPNO)
3 (PARTITION P1 VALUES LESS THAN(10),
4 PARTITION P2 VALUES LESS THAN(20));

Table created.

SQL> INSERT INTO EMP007 VALUES(&EMPNO,'&ENAME',&SAL);


Enter value for empno: 1
Enter value for ename: AAAA
Enter value for sal: 5000
old 1: INSERT INTO EMP007 VALUES(&EMPNO,'&ENAME',&SAL)
new 1: INSERT INTO EMP007 VALUES(1,'AAAA',5000)
1 row created.

SQL> /
Enter value for empno: 21
Enter value for ename: BBBB
Enter value for sal: 8000
old 1: INSERT INTO EMP007 VALUES(&EMPNO,'&ENAME',&SAL)
new 1: INSERT INTO EMP007 VALUES(21,'BBBB',8000)
INSERT INTO EMP007 VALUES(21,'BBBB',8000)
*
ERROR at line 1:
ORA-14400: inserted partition key does not map to any partition

SQL> /
Enter value for empno: 12
Enter value for ename: CCCC
Enter value for sal: 6500
old 1: INSERT INTO EMP007 VALUES(&EMPNO,'&ENAME',&SAL)
new 1: INSERT INTO EMP007 VALUES(12,'CCCC',6500)

1 row created.

SQL> SELECT * FROM EMP007;

EMPNO ENAME SAL


---------- ---------- ----------
1 AAAA 5000
12 CCCC 6500

List Partitioning

Use list partitioning when you require explicit control over how rows map to
partitions. You can specify a list of discrete values for the partitioning column
in the description for each partition.

SQL> CREATE TABLE Dept_part


(deptno number,
deptname varchar2(20),
state varchar2(2))
PARTITION BY LIST (state)
(PARTITION q1 VALUES ('OR', 'WA'),
PARTITION q2 VALUES ('AZ', 'UT', 'NM') ,
PARTITION q3 VALUES ('NY', 'VM', 'NJ'),
PARTITION q4 VALUES ('FL', 'GA'));

table created.

SQL> INSERT INTO DEPT_PART VALUES(&DEPTNO,'&DEPTNAME','&STATE')


2 ;
Enter value for deptno: 1
Enter value for deptname: AAAA
Enter value for state: OR
old 1: INSERT INTO DEPT_PART VALUES(&DEPTNO,'&DEPTNAME','&STATE')
new 1: INSERT INTO DEPT_PART VALUES(1,'AAAA','OR')

1 row created.
SQL> /
Enter value for deptno: 2
Enter value for deptname: BBBB
Enter value for state: XL
old 1: INSERT INTO DEPT_PART VALUES(&DEPTNO,'&DEPTNAME','&STATE')
new 1: INSERT INTO DEPT_PART VALUES(2,'BBBB','XL')
INSERT INTO DEPT_PART VALUES(2,'BBBB','XL')
*
ERROR at line 1:
ORA-14400: inserted partition key does not map to any partition

SQL> /
Enter value for deptno: 2
Enter value for deptname: BBB
Enter value for state: GA
old 1: INSERT INTO DEPT_PART VALUES(&DEPTNO,'&DEPTNAME','&STATE')
new 1: INSERT INTO DEPT_PART VALUES(2,'BBB','GA')

1 row created.

SQL> SELECT * FROM DEPT_PART;

DEPTNO DEPTNAME ST
---------- -------------------- --
1 AAAA OR
2 BBB GA

SQL> select partition_name from dba_tab_subpartitions where table_name='EPT_PART'

Hash Partitioning

It controls the physical placement of data across a fixed number of partitions


and gives you a highly tunable method of data placement.

To Create HASH Partition


SQL> create table purchases (inv_no number , day number,
month number, year number)
partition by hash (day, month, year)
(partition h1,
partition h2,
partition h3);

Adding a Partition to a Partitioned Table


alter table emp345 add partition p5 values less than (50);

Truncating Partitions
alter table emp345 truncate partition p5 ;

Dropping a Table Partition


Alter table emp345 drop partition p5;

Merging Partitions
ALTER TABLE emp345 MERGE PARTITIONS p1 , p2 into PARTITION p6 ;

Moving a Partitions
ALTER TABLE emp345 MOVE PARTITION p4 tablespace tbs4;

Renaming a Table Partition


ALTER TABLE emp345 rename PARTITION p4 to p45 ;

Coalescing a Partitioned Table


ALTER TABLE emp345 COALESCE PARTITION;

LOCKS

Lock means : U can do the update transaction at one location and the another person
do the same transaction at another location it can occurs the dead lock situation.

1. Implicit Locks:

? U & another person do the same transaction at the same time dead locks occurs
at that time who enter the Transaction first that will decided by the implicit
Locks. Whose person can open the table that person will do that transaction.

2. Exlicit Locks:

? U can do some Transaction these Transaction are completed to allow the other
person that is explicit Lock.
? User can provide our own manipulation per particular time given after the
time finish another person comes.
? How to Lock release in Explicit Locks used by commit/rollback.

Type of locks

1. row level locks


2. table locks

--> Row Level Locks:


This lock is used to lock either a single or group of records, for the
purpose of updations. A Row Level Lock is implemented with in a select query using
"for update of " clause.

Ex: Select * from emp where empno=7788 for update of comm,sal;


note: another user cannot manipulate comm&sal of 7788,for the rest of the numbers &
entities he can do manipulation

Ex: Select * from emp for update of comm, sal;

Note: another user cannot manipulate comm&sal all the numbers, for the rest of the
entities he can do manipulation

Ex: Select * from EMP for update;(to lock the table)

note: another user cannot manipulate all the entities of the table

Note: only manipulations r not allowed but he can retrive values (select)of the
table

--> Table Level Locks: These are further classified into three caregories...

-> Shared Lock


-> Shared Update Lock
-> Exclusive Lock

SQL> LOCK table emp in sharemode;

SQL> LOCK table emp in Share Update Mode;

SQL> LOCK table emp in Exclusive Mode -> this is not allowed to other people
before to
Release

** COMMIT/ROLLBACK will release any type of LOCK.

SQL LOADER :

scott/tiger :

create table depta(depnto number(2),dname varchar2(10),loc varchar2(10));

take any file which has raw data

file name : 'd:\ABC.TXT'

10,ACC,HYD
20,RES,SEC
30,FIN,CHENNAI
40,ADMIN,BANGLORE

Prepare a SQL Loader script to load the above raw into the above created table.

file name : 'd:\my_ctl.ctl'

LOAD DATA
INFILE "D:\ABC.TXT"
INSERT INTO TABLE DEPTA
FIELDS TERMINATED BY ','
(DEPTNO,DNAME,LOC)

in command prompt execute as below :

C:\>sqlldr scott/tiger D:\my_ctl.ctl

SQL*Loader: Release 10.1.0.2.0 - Production on Wed Jan 28 12:10:02 2009

Copyright (c) 1982, 2004, Oracle. All rights reserved.

Commit point reached - logical record count 4

C:\>

logon to :

scott/tiger
SQL> select * from depta;

DEPTNO DNAME LOC


---------- ---------- ----------
10 ACC HYD
20 RES SEC
30 FIN CHENNAI
40 ADMIN BANGLORE

import & export(data pump):

Microsoft(R) Windows DOS


(C)Copyright Microsoft Corp 1990-2001.

C:\DOCUME~1\ADMINI~1>CD\

C:\>EXP

Export: Release 10.1.0.2.0 - Production on Wed Jan 28 12:24:59 2009

Copyright (c) 1982, 2004, Oracle. All rights reserved.

Username: SCOTT/TIGER

Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 -


tion
With the Partitioning, OLAP and Data Mining options
Enter array fetch buffer size: 4096 > 5000

Export file: EXPDAT.DMP > MYDMP.DMP

(2)U(sers), or (3)T(ables): (2)U > T

Export table data (yes/no): yes > Y

Compress extents (yes/no): yes > Y

Export done in WE8MSWIN1252 character set and AL16UTF16 NCHAR character s

About to export specified tables via Conventional Path ...


Table(T) or Partition(T:P) to be exported: (RETURN to quit) > EMP

. . exporting table EMP 17 rows export


Table(T) or Partition(T:P) to be exported: (RETURN to quit) > DEPT

. . exporting table DEPT 4 rows export


Table(T) or Partition(T:P) to be exported: (RETURN to quit) >

Export terminated successfully without warnings.

C:\>

C:\>imp
Import: Release 10.1.0.2.0 - Production on Wed Jan 28 12:34:41 2009

Copyright (c) 1982, 2004, Oracle. All rights reserved.

Username: my_user/tiger

Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 -


tion
With the Partitioning, OLAP and Data Mining options

Import file: EXPDAT.DMP > mydmp.dmp

Enter insert buffer size (minimum is 8192) 30720>

Export file created by EXPORT:V10.01.00 via conventional path

Warning: the objects were exported by SCOTT, not by you

import done in WE8MSWIN1252 character set and AL16UTF16 NCHAR character s


List contents of import file only (yes/no): no > n

Ignore create error due to object existence (yes/no): no > y

Import grants (yes/no): yes > y

Import table data (yes/no): yes > y

Import entire export file (yes/no): no > y

. importing SCOTT's objects into MY_USER


. . importing table "EMP" 17 rows import
. . importing table "DEPT" 4 rows import
About to enable constraints...
Import terminated successfully without warnings.

C:\>

You might also like