SQL Important
SQL Important
following
CREATE TABLE:-
Syntax:
Create table <table_name>
(col_name datatype, col_name
datatype …coln datatype);
Ex:
SQL> create table student (no
number (2), name varchar (10), marks
number (3));
CONSTRAINTS:-
Constraints are categorized as
follows.
Domain integrity
constraints
Not null
Check
COMPOSITE KEYS
A composite key can be defined on a
combination of columns.
We can define composite keys on
entity integrity and referential
integrity constraints.
Composite key can be defined in
table and alter levels only.
UNIQUE (TABLE LEVEL)
Ex:
SQL> create table student(no
number(2) , name varchar(10),
marks number(3),
unique(no,name));
SQL> create table student(no
number(2) , name varchar(10),
marks number(3), constraint un
unique(no,name));
UNIQUE (ALTER LEVEL)
Ex:
SQL> alter table student add
unique(no,name);
SQL> alter table student add
constraint un unique(no,name);
PRIMARY KEY (TABLE LEVEL)
Ex:
SQL> create table student(no
number(2) , name varchar(10),
marks number(3),
primary key(no,name));
SQL> create table student(no
number(2) , name varchar(10),
marks number(3), constraint pk
primary key(no,name));
PRIMARY KEY (ALTER LEVEL)
Ex:
SQL> alter table student add
primary key(no,anme);
SQL> alter table student add
constraint pk primary key(no,name);
FOREIGN KEY (TABLE LEVEL)
Ex:
SQL> create table emp(empno
number(2), ename varchar(10),
deptno number(2), dname
varchar(10), primary key(empno),
foreign key(deptno,dname)
references
dept(deptno,dname));
SQL> create table emp(empno
number(2), ename varchar(10),
deptno number(2), dname
varchar(10), constraint pk
primary key(empno), constraint
fk foreign
key(deptno,dname) references
dept(deptno,dname));
FOREIGN KEY (ALTER LEVEL)
Ex:
SQL> alter table emp add foreign
key(deptno,dname) references
dept(deptno,dname);
SQL> alter table emp add
constraint fk foreign
key(deptno,dname) references
dept(deptno,dname);
DEFERRABLE CONSTRAINTS
OPERATIONS WITH
CONSTRAINTS
Possible operations with
constraints as follows.
Enable
Disable
Enforce
Drop
ENABLE
This will enable the constraint.
Before enable, the constraint will
check the existing data.
Ex:
SQL> alter table student enable
constraint un;
DISABLE
This will disable the constraint.
Ex:
SQL> alter table student enable
constraint un;
ENFORCE
This will enforce the constraint
rather than enable for future inserts
or updates.
This will not check for existing data
while enforcing data.
Ex:
SQL> alter table student enforce
constraint un;
DROP
This will remove the constraint.
Ex:
SQL> alter table student drop
constraint un;
Once the table is dropped,
constraints automatically will drop.
USING DEFAULT
Default can be considered as a
substitute behavior of not null
constraint when applied to new rows
being entered into the table.
When you define a column with the
default keyword followed by a value,
you are actually telling the database
that, on insert if a row was not assigned
a value for this column, use the default
value that you have specified.
Default is applied only during insertion
of new rows.
Ex:
SQL> create table student(no
number(2) default 11,name
varchar(2));
SQL> insert into student
values(1,'a');
SQL> insert into student(name)
values('b');
SQL> select * from student;
SQL> insert into student
values(null, ‘c’);
SQL> select * from student;
-- Default cannot override nulls.
Insert:-
FIELDS
Syntax:
Insert all
Into student values(1,’a’,100)
Into student values(2,’b’,200)
Into student values(3,’c’,300)
Select *from DEPARTMENTS
where DEPARTMENT_ID =10;
DUPLICATE ROWS
Syntax:
Insert all
Into student values(1,’a’,100)
Into student values(2,’b’,200)
Into student values(3,’c’,300)
Select *from DEPARTMENTS
where DEPARTMENT_ID > 10;
SELECT:-
Select * from <table_name>; ( here *
indicates all columns)
or
Select col1, col2,….., coln from
<table_name>;
Ex:
SQL> select * from Employees;
SQL> select employee_id,
first_name, salary from Employees;
SQL> select employee_id,
first_name from Employees;
USING WHERE
+, -, *, /
Comparison operators
And
Or -- lowest precedence
Not
Syntax:
select * from <table_name> where
<condition1> ;
Ex:
SQL> select * from student where no
= 2;
SQL> select * from student where no
< 2;
SQL> select * from student where no
> 2;
SQL> select * from student where no
<= 2;
SQL> select * from student where no
>= 2;
SQL> select * from student where no
!= 2;
SQL> select * from student where no
<> 2;
b) USING AND
Syntax:
select * from <table_name> where
<condition1> and <condition2> and ..
<conditionn>;
Ex:
SQL> select * from student where no
= 2 and marks >= 200;
c) USING OR
Syntax:
select * from <table_name> where
<condition1> and <condition2> or ..
<conditionn>;
Ex:
SQL> select * from student where no
= 2 or marks >= 200;
Syntax:
select * from <table_name> where
<col> between <lower bound> and
<upper bound>;
Ex:
SQL> select * from student where
marks between 200 and 400;
Syntax:
select * from <table_name> where
<col> not between <lower bound> and
<upper bound>;
Ex:
SQL> select * from student where
marks not between 200 and 400;
f) USING IN()
Syntax:
select * from <table_name> where
<col> in ( value1, value2, value3 …
valuen);
Ex:
SQL> select * from student where no
in (1, 2, 3);
g) USING NOT IN
Syntax:
select * from <table_name> where
<col> not in ( value1, value2, value3 …
valuen);
Ex:
SQL> select * from student where no
not in (1, 2, 3);
h) USING NULL
This will gives the output based on the null
values in the specified column.
Syntax:
select * from <table_name> where
<col> is null;
Ex:
SQL> select * from student where
marks is null;
Syntax:
select * from <table_name> where
<col> is not null;
Ex:
SQL> select * from student where
marks is not null;
j) USING LIKE
Syntax:
select * from <table_name> where
<col> like <pattern>;
Ex:
i) This will give the rows whose
marks are 100.
SQL> select * from employees where
salary like 100;
ii) This will give the rows whose
name start with ‘S’.
SQL> select * from employees where
first_name like 'S%';
Syntax:
Select * from <table_name> order
by <col> desc;
l) Concatenation
m)
n) COLUMN ALIASES
Syntax:
Select <orginal_col> <alias_name>
from <table_name>;
Ex:
SQL> select no sno from student;
or
SQL> select no “sno” from student;
or
SQL> select no as “sno” from
student;
o) TABLE ALIASES
If you are using table aliases you can
use dot method to the columns.
Syntax:
Select <alias_name>.<col1>,
<alias_name>.<col2> …
<alias_name>.<coln> from
<table_name> <alias_name>;
Ex:
SQL> select s.no, s.name from
student s;
Or
SQL> select s.no as sno, s.name as
sname from student s;
p) FUNCTIONS
Functions can be
categorized as follows.
Single row functions
Group functions
Abs
Sign
Sqrt
Mod
Nvl
Power
Exp
Ln
Log
Ceil
Floor
Round
Trunc
Bitand
Greatest
Least
Coalesce
a) ABS
Absolute value is the measure of the
magnitude of value.
Absolute value is always a positive
number.
Syntax: abs (value)
Ex:
SQL> select abs (5), abs (-5), abs
(0), abs (null) from dual;
b) SIGN
Sign gives the sign of a value.
Syntax: sign (value)
Ex:
SQL> select sign(5), sign(-5),
sign(0), sign(null) from dual;
c) SQRT
This will give the square root of the
given value. It also accepts precision
values.
Syntax: sqrt (value) -- here value
must be positive.
Ex:
SQL> select sqrt(4), sqrt(0),
sqrt(null), sqrt(1) from dual;
d) MOD
This will give the remainder.
Syntax: mod (value, divisor)
Ex:
SQL> select mod(7,4), mod(1,5),
mod(null,null), mod(0,0), mod(-7,4)
from dual;
e) NVL
This will substitutes the specified
value in the place of null values.
Syntax: nvl (null_col,
replacement_value)
Ex:
SQL> select * from student; --
observe the null values
SQL> select no, name,
nvl(marks,300) from student;
SQL> select nvl(1,2), nvl(2,3),
nvl(4,3), nvl(5,4) from dual;
SQL> select nvl(0,0), nvl(1,1),
nvl(null,null), nvl(4,4) from dual;
f) POWER
Power is the ability to raise a value to
a given exponent.
Syntax: power (value, exponent)
Ex:
SQL> select power(2,5),
power(0,0), power(1,1),
power(null,null), power(2,-5) from
dual;
g) EXP
This will raise e value to the give
power.
Syntax: exp (value)
Ex:
SQL> select exp(1), exp(2), exp(0),
exp(null), exp(-2) from dual;
h) LN
This is based on natural or base e
logarithm.
Syntax: ln (value) -- here value must
be greater than zero which is
positive only.
Ex:
SQL> select ln(1), ln(2), ln(null)
from dual;
Ln and Exp are reciprocal to each
other.
EXP (3) = 20.0855369
LN (20.0855369) = 3
i) LOG
This is based on 10 based logarithm.
Syntax: log (10, value) -- here value
must be greater than zero which is
positive only. Ex:
SQL> select log(10,100), log(10,2),
log(10,1), log(10,null) from dual;
LN (value) = LOG (EXP(1), value)
SQL> select ln(3), log(exp(1),3)
from dual;
j) CEIL
This will produce a whole number
that is greater than or equal to the
specified value.
Syntax: ceil (value)
Ex:
SQL> select ceil (5), ceil (5.1), ceil
(-5), ceil (-5.1), ceil(0), ceil(null) from
dual;
k) FLOOR
This will produce a whole number
that is less than or equal to the
specified value.
Syntax: floor (value)
Ex:
SQL> select floor(5), floor(5.1),
floor(-5), floor( -5.1), floor(0),
floor(null) from dual;
l) ROUND
This will rounds numbers to a given
number of digits of precision.
Syntax: round (value, precision)
Ex:
SQL> select round(123.2345),
round(123.2345,2),
round(123.2354,2) from dual;
SQL> select round(123.2345,-1),
round(123.2345,-2),
round(123.2345,-3),
round(123.2345,-4) from dual;
SQL> select round(123,0),
round(123,1), round(123,2) from
dual;
SQL> select round(-123,0),
round(-123,1), round(-123,2)
from dual;
SQL> select round(123,-1),
round(123,-2), round(123,-3),
round(-123,-1), round(-123,-2),
round(-123,-3) from dual;
SQL> select round(null,null),
round(0,0), round(1,1), round(-1,-
1), round(-2,-2) from dual;
m) TRUNC
This will truncates or chops off digits of
precision from a number.
Syntax: trunc (value, precision)
Ex:
SQL> select trunc(123.2345),
trunc(123.2345,2),
trunc(123.2354,2) from dual;
SQL> select trunc(123.2345,-1),
trunc(123.2345,-2),
trunc(123.2345,-3),
trunc(123.2345,-4) from dual;
SQL> select trunc(123,0),
trunc(123,1), trunc(123,2) from
dual;
SQL> select trunc(-123,0), trunc(-
123,1), trunc(-123,2) from dual;
SQL> select trunc(123,-1),
trunc(123,-2), trunc(123,-3),
trunc(-123,-1), trunc(-123,2),
trunc(-123,-3) from dual;
SQL> select trunc(null,null),
trunc(0,0), trunc(1,1), trunc(-1,-
1), trunc(-2,-2) from dual;
n) BITAND
This will perform bitwise and operation.
Syntax: bitand (value1, value2)
Ex:
SQL> select bitand(2,3),
bitand(0,0), bitand(1,1),
bitand(null,null), bitand(-2,-3)
from dual;
o) GREATEST
This will give the greatest number.
Syntax: greatest (value1, value2,
value3 … valuen)
Ex:
SQL> select greatest(1, 2, 3),
greatest(-1, -2, -3) from dual;
If all the values are zeros
then it will display zero.
If all the parameters are
nulls then it will display
nothing.
If any of the parameters is
null it will display nothing.
p) LEAST
This will give the least number.
Syntax: least (value1, value2, value3
… valuen)
Ex:
SQL> select least(1, 2, 3), least(-1,
-2, -3) from dual;
If all the values are
zeros then it will display
zero.
If all the parameters
are nulls then it will
display nothing.
If any of the
parameters is null it will
display nothing.
q) COALESCE
This will return first non-null value.
Syntax: coalesce (value1, value2,
value3 … valuen)
Ex:
SQL> select coalesce(1,2,3),
coalesce(null,2,null,5) from dual;
2. STRING FUNCTIONS
Initcap
Upper
Lower
Length
Rpad
Lpad
Ltrim
Rtrim
Trim
Translate
Replace
Soundex
Concat (‘ || ‘
Concatenation operator)
Ascii
Chr
Substr
Instr
Decode
Greatest
Least
Coalesce
a) INITCAP
This will capitalize the initial letter of the
string.
Syntax: initcap (string)
Ex:
SQL> select initcap('computer')
from dual;
b) UPPER
This will convert the string into
uppercase.
Syntax: upper (string)
Ex:
SQL> select upper('computer')
from dual;
c) LOWER
This will convert the string into
lowercase.
Syntax: lower (string)
Ex:
SQL> select lower('COMPUTER')
from dual;
d) LENGTH
This will give length of the string.
Syntax: length (string)
Ex:
SQL> select length('computer')
from dual;
e) RPAD
This will allows you to pad the right side
of a column with any set of characters.
Syntax: rpad (string, length [,
padding_char])
Ex:
SQL> select
rpad('computer',15,'*'),
rpad('computer',15,'*#') from
dual;
-- Default padding character was
blank space.
f) LPAD
This will allows you to pad the left side
of a column with any set of characters.
Syntax: lpad (string, length [,
padding_char])
Ex:
SQL> select
lpad('computer',15,'*'),
lpad('computer',15,'*#') from
dual;
-- Default padding character was
blank space.
g) LTRIM
This will trim off unwanted characters
from the left end of string.
Syntax: ltrim (string
[,unwanted_chars])
Ex:
SQL> select ltrim('computer','co'),
ltrim('computer','com') from
dual;
SQL> select
ltrim('computer','puter'),
ltrim('computer','omputer') from
dual;
-- If you haven’t specify any
unwanted characters it will
display entire string.
h) RTRIM
This will trim off unwanted characters
from the right end of string.
Syntax: rtrim (string [,
unwanted_chars])
Ex:
SQL> select rtrim('computer','er'),
rtrim('computer','ter') from dual;
SQL> select
rtrim('computer','comput’),
rtrim('computer','compute') from
dual;
-- If you haven’t specify any
unwanted characters it will
display entire string.
i) TRIM
This will trim off unwanted characters
from the both sides of string.
Syntax: trim (unwanted_chars from
string)
Ex:
SQL> select trim( 'i' from 'indiani')
from dual;
SQL> select trim( leading'i' from
'indiani') from dual; -- this will
work as LTRIM
SQL> select trim( trailing'i' from
'indiani') from dual; -- this will
work as RTRIM
j) TRANSLATE
This will replace the set of characters,
character by character.
Syntax: translate (string, old_chars,
new_chars)
Ex:
SQL> select
translate('indianin','in','01') from
dual;
k) REPLACE
This will replace the set of characters,
string by string.
Syntax: replace (string, old_chars [,
new_chars])
Ex:
SQL> select
replace('india','in','xy'),
replace(‘india’,’in’) from dual;
l) SOUNDEX
This will be used to find words that
sound like other words, exclusively used
in where clause.
Syntax: soundex (string)
Ex:
SQL> select * from emp where
soundex(ename) =
soundex('SMIT');
m) CONCAT
This will be used to combine two strings
only.
Syntax: concat (string1, string2)
Ex:
SQL> select concat('computer','
operator') from dual;
If you want to combine more
than two strings you have to use
concatenation operator (||).
SQL> select 'how' || ' are' || '
you' first_name.concat(‘?’) from
employees;
n) ASCII
This will return the decimal
representation in the database
character set of the first
character of the string.
Syntax: ascii (string)
Ex:
SQL> select ascii('a'), ascii('apple')
from dual;
o) CHR
This will return the character having the
binary equivalent to the string in either
the
database character set or the national
character set.
Syntax: chr (number)
Ex:
SQL> select chr(97) from dual;
p) SUBSTR
This will be used to extract substrings.
Syntax: substr (string,
start_chr_count [, no_of_chars])
Ex:
SQL> select substr('computer',2),
substr('computer',2,5),
substr('computer',3,7) from dual;
If no_of_chars parameter
is negative then it will display
nothing.
If both parameters except
string are null or zeros then it
will display nothing.
If no_of_chars parameter
is greater than the length of
the string then it ignores and
calculates based on the
orginal string length.
If start_chr_count is
negative then it will extract
the substring from right end.
q) INSTR
This will allows you for searching
through a string for set of characters.
Syntax: instr (string, search_str [,
start_chr_count [, occurrence] ])
Ex:
SQL> select
instr('information','o',4,1),
instr('informationo','o',4,2) from
dual;
If you are not specifying
start_chr_count and
occurrence then it will start
search from the beginning and
finds first occurrence only.
If both parameters
start_chr_count and
occurrence are null, it will
display nothing.
r) DECODE
Decode will act as value by value
substitution.
For every value of field, it will checks for
a match in a series of if/then tests.
Syntax: decode (value, if1, then1,
if2, then2, ……. else);
Ex:
SQL> select sal,
decode(sal,500,'Low',5000,'High','
Medium') from emp;
SQL> select decode(1,1,3),
decode(1,2,3,4,4,6) from dual;
If the number of
parameters are odd and
different then decode will
display nothing.
If the number of
parameters are even and
different then decode will
display last value.
If all the parameters are
null then decode will display
nothing.
If all the parameters are
zeros then decode will display
zero.
s) GREATEST
This will give the greatest string.
Syntax: greatest (strng1, string2,
string3 … stringn)
Ex:
SQL> select greatest('a', 'b', 'c'),
greatest('satish','srinu','saketh')
from dual;
If all the parameters are
nulls then it will display
nothing.
If any of the parameters is
null it will display nothing.
t) LEAST
This will give the least string.
Syntax: greatest (strng1, string2,
string3 … stringn)
Ex:
SQL> select least('a', 'b', 'c'),
least('satish','srinu','saketh') from
dual;
If all the parameters
are nulls then it will display
nothing.
If any of the
parameters is null it will
display nothing.
u) COALESCE
This will gives the first non-null string.
Syntax: coalesce (strng1, string2,
string3 … stringn)
Ex:
SQL> select coalesce('a','b','c'),
coalesce(null,'a',null,'b') from
dual;
3. DATE FUNCTIONS
Sysdate
Current_date
Current_timestamp
Systimestamp
Localtimestamp
Dbtimezone
Sessiontimezone
To_char
To_date
Add_months
Months_between
Next_day
Last_day
Extract
Greatest
Least
Round
Trunc
New_time
Coalesce
d) SYSTIMESTAMP
This will returns the system date,
including fractional seconds and time
zone of the
database.
Ex:
SQL> select systimestamp from
dual;
e) LOCALTIMESTAMP
This will returns local timestamp in the
active time zone information, with no
time zone information shown.
Ex:
SQL> select localtimestamp from
dual;
f) DBTIMEZONE
This will returns the current database
time zone in UTC format. (Coordinated
Universal Time)
Ex:
SQL> select dbtimezone from
dual;
g) SESSIONTIMEZONE
This will returns the value of the current
session’s time zone.
Ex:
SQL> select sessiontimezone from
dual;
h) TO_CHAR
This will be used to extract various date
formats.
The available date formats as follows.
Syntax: to_char (date, format)
DATE FORMATS
D -- No of days in week
DD -- No of days in month
DDD -- No of days in year
MM -- No of month
MON -- Three letter
abbreviation of month
MONTH -- Fully spelled out
month
RM -- Roman numeral
month
DY -- Three letter
abbreviated day
DAY -- Fully spelled out
day
Y -- Last one digit of the
year
YY -- Last two digits of the
year
YYY -- Last three digits of
the year
YYYY -- Full four digit year
SYYYY -- Signed year
I -- One digit year from
ISO standard
IY -- Two digit year from
ISO standard
IYY -- Three digit year
from ISO standard
IYYY -- Four digit year
from ISO standard
Y, YYY -- Year with comma
YEAR -- Fully spelled out
year
CC -- Century
Q -- No of quarters
W -- No of weeks in month
WW -- No of weeks in year
IW -- No of weeks in year
from ISO standard
HH -- Hours
MI -- Minutes
SS -- Seconds
FF -- Fractional seconds
AM or PM -- Displays AM or
PM depending upon time of
day
A.M or P.M -- Displays A.M
or P.M depending upon
time of day
AD or BC -- Displays AD or
BC depending upon the
date
A.D or B.C -- Displays AD
or BC depending upon the
date
FM -- Prefix to month or
day, suppresses padding of
month or day
TH -- Suffix to a number
SP -- suffix to a number to
be spelled out
SPTH -- Suffix combination
of TH and SP to be both
spelled out
THSP -- same as SPTH
Ex:
SQL> select to_char(sysdate,'dd
month yyyy hh:mi:ss am dy') from
dual;
SQL> select to_char(sysdate,'dd
month year') from dual;
SQL> select to_char(sysdate,'dd
fmmonth year') from dual;
SQL> select to_char(sysdate,'ddth
DDTH') from dual;
SQL> select
to_char(sysdate,'ddspth
DDSPTH') from dual;
SQL> select to_char(sysdate,'ddsp
Ddsp DDSP ') from dual;
i) TO_DATE
This will be used to convert the string
into date format.
Syntax: to_date (date)
Ex:
SQL> select
to_char(to_date('24/dec/2006','d
d/mon/yyyy'), 'dd * month * day')
from dual;
-- If you are not using to_char
will display output in default date
format.
j) ADD_MONTHS
This will add the specified months to the
given date.
Syntax: add_months (date,
no_of_months)
Ex:
SQL> select
add_months(to_date('11-jan-
1990','dd-mon-yyyy'), 5) from
dual;
SQL> select
add_months(to_date('11-jan-
1990','dd-mon-yyyy'), -5) from
dual;
If no_of_months is zero
then it will display the
same date.
If no_of_months is null
then it will display nothing.
k) MONTHS_BETWEEN
This will give difference of months
between two dates.
Syntax: months_between (date1,
date2)
Ex:
SQL> select
months_between(to_date('11-aug-
1990','dd-mon-yyyy'), to_date('11-
jan-1990','dd-mon-yyyy')) from
dual;
SQL> select
months_between(to_date('11-jan-
1990','dd-mon-yyyy'), to_date('11-
aug- 1990','dd-mon-yyyy')) from
dual;
l) NEXT_DAY
This will produce next day of the given
day from the specified date.
Syntax: next_day (date, day)
Ex:
SQL> select
next_day(to_date('24-dec-
2006','dd-mon-yyyy'),'sun') from
dual;
-- If the day parameter is null
then it will display nothing.
m) LAST_DAY
This will produce last day of the given
date.
Syntax: last_day (date)
Ex:
SQL> select last_day(to_date('24-
dec-2006','dd-mon-yyyy'),'sun')
from dual;
n) EXTRACT
This is used to extract a portion of the
date value.
Syntax: extract ((year | month | day
| hour | minute | second), date)
Ex:
SQL> select extract(year from
sysdate) from dual;
-- You can extract only one value
at a time.
o) GREATEST
This will give the greatest date.
Syntax: greatest (date1, date2,
date3 … daten)
Ex:
SQL> select greatest(to_date('11-
jan-90','dd-mon-yy'),to_date('11-
mar-90','dd-mon-
yy'),to_date('11-apr-90','dd-mon-
yy')) from dual;
p) LEAST
This will give the least date.
Syntax: least (date1, date2, date3 …
daten)
Ex:
SQL> select least(to_date('11-jan-
90','dd-mon-yy'),to_date('11-
mar-90','dd-mon-
yy'),to_date('11-apr-90','dd-mon-
yy')) from dual;
q) ROUND
Round will rounds the date to which it
was equal to or greater than the given date.
Syntax: round (date, (day | month |
year))
If the second parameter
was year then round will
checks the month of the
given date in the following
ranges.
JAN -- JUN
JUL -- DEC
If the month falls between
JAN and JUN then it
returns the first day of the
current year.
If the month falls between
JUL and DEC then it
returns the first day of the
next year.
If the second parameter
was month then round will
checks the day of the
given date in the following
ranges.
1 -- 15
16 -- 31
If the day falls between 1
and 15 then it returns the
first day of the current
month.
If the day falls between 16
and 31 then it returns the
first day of the next
month.
If the second parameter
was day then round will
checks the week day of the
given date in the following
ranges.
SUN -- WED
THU -- SUN
If the week day falls
between SUN and WED
then it returns the
previous sunday.
If the weekday falls
between THU and SUN
then it returns the next
sunday.
If the second
parameter was null then it
returns nothing.
If the you are not
specifying the second
parameter then round will
resets the time to the
beginning of the current
day in case of user
specified date.
If the you are not
specifying the second
parameter then round will
resets the time to the
beginning of the next day
in case of sysdate.
Ex:
SQL> select round(to_date('24-
dec-04','dd-mon-yy'),'year'),
round(to_date('11-mar- 06','dd-
mon-yy'),'year') from dual;
SQL> select round(to_date('11-
jan-04','dd-mon-yy'),'month'),
round(to_date('18-jan-04','dd-
mon-yy'),'month') from dual;
SQL> select round(to_date('26-
dec-06','dd-mon-yy'),'day'),
round(to_date('29-dec- 06','dd-
mon-yy'),'day') from dual;
SQL> select
to_char(round(to_date('24-dec-
06','dd-mon-yy')), 'dd mon yyyy
hh:mi:ss am') from dual;
r) TRUNC
Trunc will chops off the date to which it
was equal to or less than the given date.
Syntax: trunc (date, (day | month |
year))
If the second
parameter was year then it
always returns the first
day of the current year.
If the second
parameter was month then
it always returns the first
day of the current month.
If the second
parameter was day then it
always returns the
previous sunday.
If the second
parameter was null then it
returns nothing.
If the you are not
specifying the second
parameter then trunk will
resets the time to the
beginning of the current
day.
Ex:
SQL> select trunc(to_date('24-
dec-04','dd-mon-yy'),'year'),
trunc(to_date('11-mar-06','dd-
mon-yy'),'year') from dual;
SQL> select trunc(to_date('11-
jan-04','dd-mon-yy'),'month'),
trunc(to_date('18-jan-04','dd-
mon-yy'),'month') from dual;
SQL> select trunc(to_date('26-
dec-06','dd-mon-yy'),'day'),
trunc(to_date('29-dec-06','dd-
mon-yy'),'day') from dual;
SQL> select
to_char(trunc(to_date('24-dec-
06','dd-mon-yy')), 'dd mon yyyy
hh:mi:ss am') from dual;
s) NEW_TIME
This will give the desired timezone’s
date and time.
Syntax: new_time (date,
current_timezone,
desired_timezone)
Available timezones are as
follows.
TIMEZONES
AST/ADT -- Atlantic
standard/day light time
BST/BDT -- Bering
standard/day light time
CST/CDT -- Central
standard/day light time
EST/EDT -- Eastern
standard/day light time
GMT -- Greenwich mean
time
HST/HDT -- Alaska-Hawaii
standard/day light time
MST/MDT -- Mountain
standard/day light time
NST -- Newfoundland
standard time
PST/PDT -- Pacific
standard/day light time
YST/YDT -- Yukon
standard/day light time
Ex:
SQL> select
to_char(new_time(sysdate,'gmt','
yst'),'dd mon yyyy hh:mi:ss am')
from dual;
SQL> select
to_char(new_time(sysdate,'gmt','
est'),'dd mon yyyy hh:mi:ss am')
from dual;
t) COALESCE
This will give the first non-null date.
Syntax: coalesce (date1, date2,
date3 … daten)
Ex:
SQL> select coalesce('12-jan-
90','13-jan-99'), coalesce(null,'12-
jan-90','23-mar-98',null) from
dual;
4. MISCELLANEOUS
FUNCTIONS
Uid
User
Vsize
Rank
Dense_rank
a) UID
This will returns the integer value
corresponding to the user currently logged
in.
Ex:
SQL> select uid from dual;
b) USER
This will returns the login’s user name.
Ex:
SQL> select user from dual;
c) VSIZE
This will returns the number of bytes in
the expression.
Ex:
SQL> select vsize(123),
vsize('computer'), vsize('12-jan-90')
from dual;
d) RANK
This will give the non-sequential ranking.
Ex:
SQL> select rownum,sal from
(select sal from emp order by sal
desc);
SQL> select rank(2975) within
group(order by sal desc) from emp;
d) DENSE_RANK
This will give the sequential ranking.
Ex:
SQL> select dense_rank(2975)
within group(order by sal desc) from
emp;
5. CONVERSION FUNCTIONS
Bin_to_num
Chartorowid
Rowidtochar
To_number
To_char
To_date
a) BIN_TO_NUM
This will convert the binary value to its
numerical equivalent.
Syntax: bin_to_num( binary_bits)
Ex:
SQL> select bin_to_num(1,1,0)
from dual;
b) CHARTOROWID
This will convert a character string to act
like an internal row identifier or rowid.
c) ROWIDTOCHAR
This will convert an internal row
identifier or rowid to character string.
d) TO_NUMBER
This will convert a char or varchar to
number.
e) TO_CHAR
This will convert a number or date to
character string.
f) TO_DATE
This will convert a number, char or
varchar to a date.
6. GROUP FUNCTIONS
Sum
Avg
Max
Min
Count
Group functions will be applied on all
the rows but produces single output.
a) SUM
This will give the sum of the values of
the specified column.
Syntax: sum (column)
Ex:
SQL> select sum(sal) from emp;
b) AVG
This will give the average of the values
of the specified column.
Syntax: avg (column)
Ex:
SQL> select avg(sal) from emp;
c) MAX
This will give the maximum of the values
of the specified column.
Syntax: max (column)
Ex:
SQL> select max(sal) from emp;
d) MIN
This will give the minimum of the values
of the specified column.
Syntax: min (column)
Ex:
SQL> select min(sal) from emp;
e) COUNT
This will give the count of the values of
the specified column.
Syntax: count (column)
Ex:
SQL> select count(sal),count(*)
from emp;
2. HAVING
This will work as where clause which
can be used only with group by
because of absence of where clause in
group by.
Ex:
SQL> select
department_Id,job_Id,sum(sala
ry) tsal from employees group
by department_Id,job_Id having
sum(salary) > 3000;
SQL> select
department_Id,job_Id,sum(sala
ry) tsal from employees group
by department_Id,job_Id having
sum(salary) > 3000 order by
job_Id;
ORDER OF EXECUTION
Group the rows together
based on group by
clause.
Calculate the group
functions for each group.
Choose and eliminate
the groups based on the
having clause.
Order the groups based
on the specified column.
2. USING GROUPING
In the above query it will give the total
salary of the individual departments but
with a
blank in the job column and gives the
total salary of all the departments with
blanks in
department_Id and job columns.
To replace these blanks with your
desired string grouping will be used
Ex:
SQL> select
decode(grouping(department_Id),1,'
All
Depts',department_Id),decode(group
ing(job_Id),1,'All jobs',job),sum(sal)
from emp group by
rollup(department_Id,job_Id);
Grouping will return 1 if the column
which is specified in the grouping
function has been used in rollup.
Grouping will be used in association
with decode.
USING CUBE:-
This will give the salaries in each
department in each job category, the total
salary for individual departments, the total
salary of all the departments and the
salaries in each job category.
Ex:
SQL> select
decode(grouping(department_Id),1,’
All
Depts’,department_Id),decode(grou
ping(job_id),1,’All
Jobs’, job_id),sum(salary) from
employees group by
cube(department_Id, job_id);
t) SET OPERATORS
TYPES
Union
Union all
Intersect
Minus
1. UNION
This will combine the records of
multiple tables having the same
structure. It will display unique
records.
Ex:
SQL> select * from student1 union
select * from student2;
2. UNION ALL
This will combine the records of
multiple tables having the same
structure but including duplicates.
Ex:
SQL> select * from student1 union all
select * from student2;
3. INTERSECT
This will give the common records of
multiple tables having the same
structure.
Ex:
SQL> select * from student1
intersect select * from student2;
4. MINUS
This will give the records of a first
table whose records are not in other
tables having the same structure.
Ex:
SQL> select * from student1 minus
select * from student2;
u) JOINS
The purpose of a join is to combine
the data across tables. A join is
actually performed by the where
clause which combines the specified
rows of tables. If a join involves in
more than two tables then oracle
joins first two tables based on the
joins condition and then compares
the result with the next table and so
on.
TYPES
Equi join
Non-equi join
Self-join
Natural join
Cross join
Outer join
o Left outer
o Right outer
o Full outer
Inner join
Using clause
On clause
Assume that we have the following
tables.
SQL> select * from Departments;
SQL> select * from Employees;
1. EQUI JOIN
A join which contains an ‘=’ operator
in the joins condition.
Ex:
SQL> select employee_Id,
first_name, job_id,
department_name, location_id from
Employees e, Departments d where
e. department_id=d. department_id;
2. USING CLAUSE
Ex:
SQL> select employee_Id,
first_name, job_id,
department_name, location_id from
Employees e join Departments d
using (department_id);
3. ON CLAUSE
Ex:
SQL> select employee_Id,first_name,
job_id, department_name,
location_id from Employees e join
Departments d on (e. department_id
=d. department_id);
4. NON-EQUI JOIN
A join which contains an operator
other than ‘=’ in the joins condition.
Ex:
SQL> select employee_Id,first_name,
job_id, department_name,
location_id from Employees e,
Departments d where e.
department_id > d. department_id;
5. SELF JOIN
Joining the table itself is called self-
join.
Ex:
SQL> select e1.employee_Id,
e2.first_name, e1. job_id, e2.
department_id from Employees
e1,Employees e2 where
e1.employee_Id=e2. employee_Id;
6. NATURAL JOIN
Natural join compares all the
common columns .
Ex:
SQL> select employee_Id,first_name,
job_id, department_name,
location_id from Employees natural
join Departments;
7. CROSS JOIN
This will gives the cross product.
Ex:
SQL> select employee_Id,
first_name, job_id,
department_name, location_id from
Employees cross join Departments;
9. INNER JOIN
This will display all the records that
have matched.
Ex:
SQL> select employee_Id,
first_name, job_id,
department_name, location_id from
Employees inner join Departments
using (department_id);
3. MULTIPLE SUBQUERIES
There is no limit on the number of
subqueries included in a where
clause. It allows nesting of a query
within a subquery.
Ex:
SQL> select * from employees where
salary = (select max(salary) from
employees where salary < (select
max(salary) from employees));
4. CORRELATED SUBQUERIES
A subquery is evaluated once for the
entire parent statement where as a
correlated subquery is evaluated
once for every row processed by the
parent statement.
Ex:
SQL> select distinct department_id
from employees e where 5 <= (select
count (first_name) from employees
where e. department_id =
department_id);
EXISTS
Exists function is a test for existence.
This is a logical test for the return of
rows from a query.
Ex:
Suppose we want to display the
department numbers which has
more than 4 employees.
SQL> select department_id, count(*)
from employees group by
department_id having count(*) > 4;
From the above query if you want to
display the names of employees?
NOT EXISTS
SQL> select department_id,
first_name from employees e1
where not exists (select * from
employees e2 where
e1.department_id
=e2.department_id group by
e2.department_id having
count(e2.first_name) > 4) order by
department_id ,first_name;
UPDATE:-
This can be used to modify the table data.
Syntax:
Update <table_name> set <col1> =
value1, <col2> = value2 where
<condition>;
Ex:
SQL> update student set marks =
500;
If you are not specifying any
condition this will update entire
table.
SQL> update student set marks = 500
where no = 2;
SQL> update student set marks =
500, name = 'Venu' where no = 1;
DELETE:-
This can be used to delete the table data
temporarily.
Syntax:
Delete <table_name> where
<condition>;
Ex:
If you are not specifying any
condition this will delete entire
table.
SQL> delete student;
If you are specifying condition this
will delete rows matches with that
condition.
SQL> delete student where no = 2;
ALTER:-
1) ADDING COLUMN
Syntax:
alter table <table_name> add
<col datatype>;
Ex:
SQL> alter table student add sdob
date;
2) REMOVING COLUMN
Syntax:
alter table <table_name> drop
<col datatype>;
Ex:
SQL> alter table student drop
column sdob;
3) INCREASING OR DECREASING
PRECISION OF A COLUMN
Syntax:
alter table <table_name> modify
<col datatype>;
Ex:
SQL> alter table student modify
marks number(5);
* To decrease precision the column
values should be empty.
6) RENAMING COLUMN
Syntax:
alter table <table_name> rename
column <old_col_name> to
<new_col_name>;
Ex:
SQL> alter table student rename
column marks to smarks;
TRUNCATE:-
DROP:-
RENAME:-
MERGE:-
You can use merge command to
perform insert and update in a single
command.
Ex:
SQL> Merge into student1 s1
Using (select *From student2) s2
On(s1.no=s2.no)
When matched then
Update set marks = s2.marks
When not matched then
Insert (s1.no,s1.name,s1.marks)
Values(s2.no,s2.name,s2.marks);
In the above the two tables are
with the same structure but we
can merge different structured
tables also but the datatype of
the columns should match.
Assume that student1 has
columns like no,name,marks and
student2 has columns like no,
name, hno, city.
COMMIT:-
This will be used to save the work.
Commit is of two types.
Implicit
Explicit
a) IMPLICIT
This will be issued by
internally in two situations.
When any DDL
(create, drop... etc.)
operation is performed.
When you are
exiting from SQL *
PLUS.
b) EXPLICIT
This will be issued by the
user.
Syntax:
Commit or commit work;
* Whenever you
committed then the
transaction was
completed.
ROLLBACK:-
This will undo the operation. This will
be applied in two methods.
Up to previous
commit
Up to previous
rollback
Syntax:
Roll or roll work;
Or
Rollback or rollback work;
* While process is going on, if
suddenly power goes then will
roll back the transaction.
SAVEPOINT:-
You can use savepoints to rollback
portions of your current set of
transactions.
Syntax:
Savepoint <savepoint_name>;
Ex:
SQL> savepoint s1;
SQL> insert into student values(1, ‘a’,
100);
SQL> savepoint s2;
SQL> insert into student values(2, ‘b’,
200);
SQL> savepoint s3;
SQL> insert into student values(3, ‘c’,
300);
SQL> savepoint s4;
SQL> insert into student values(4, ‘d’,
400);
Before rollback
SQL> select * from student;
SQL> rollback to savepoint s3;
Or
SQL> rollback to s3;
This will rollback last two records.
SQL> select * from student;
GRANT:-
This is used to grant the privileges to
other users.
Syntax:
Grant <privileges> on
<object_name> to <user_name> [with
grant option];
Ex:
SQL> grant select on student to
sudha; -- you can give individual
privilege
SQL> grant select, insert on student
to sudha; -- you can give set of privileges
SQL> grant all on student to sudha; --
you can give all privileges
VIEWS:-
A view is a database object that is a
logical representation of a table. It is
delivered from a table but has no
storage of its own and often may be
used in the same manner as a table.
A view takes the output of the query
and treats it as a table, therefore a
view can be thought of as a stored
query or a virtual table.
TYPES of views
Simple view
Complex view
WHY VIEWS?
Provides additional
level of security by
restricting access to a
predetermined set of
rows and/or columns of
a table.
Hide the data
complexity.
Simplify commands
for the user.
Ex:
SQL> Create view dept_v as select
*from department with read only;
SQL> Create view dept_v as select
deptno, sum(salary) t_salary from emp
group by deptno;
SQL> Create view stud as select
rownum no, name, marks from student;
SQL> Create view student as select
*from student1 union select *from
student2;
SQL> Create view stud as select
distinct no, name from student;
SYNONYM
A synonym is a database object,
which is used as an alias for a table, view
or sequence.
TYPES
Private
Public
Private synonym is available to the
particular user who creates.
Public synonym is created by DBA
which is available to all the users.
ADVANTAGES
Hide the name and
owner of the object.
Provides location
transparency for remote
objects of a distributed
database.
Ex:
SQL> create sequence s;
SQL> create sequence s increment by
10 start with 100 minvalue 5
maxvalue 200 cycle cache 20;
USING SEQUENCE
SQL> create table student(no
number(2),name varchar(10));
SQL> insert into student
values(s.nextval, ‘saketh’);
Initially currval is not
defined and nextval is
starting value.
After that nextval and
currval are always
equal.
CREATING ALPHA-NUMERIC SEQUENCE
SQL> create sequence s start with
111234;
SQL> Insert into student values
(s.nextval || translate
(s.nextval,’1234567890’,’abcdefghij’)
);
ALTERING SEQUENCE
We can alter the sequence to
perform the following.
Set or eliminate
minvalue or maxvalue.
Change the
increment value.
Change the number
of cached sequence
numbers.
Ex:
SQL> alter sequence s minvalue 5;
SQL> alter sequence s increment by
2;
SQL> alter sequence s cache 10;
DROPPING SEQUENCE
SQL> drop sequence s;
INDEXES:-
Index is typically a listing of keywords
accompanied by the location of
information on a subject. We can
create indexes explicitly to speed up
SQL statement execution on a table.
The index points directly to the
location of the rows containing the
value.
WHY INDEXES?
Indexes are most useful on larger
tables, on columns that are likely to
appear in where clauses as simple
equality.
TYPES
Unique index
Non-unique index
Btree index
Bitmap index
Composite index
Reverse key index
Function-based index
Descending index
Domain index
Object index
Cluster index
Text index
Index organized table
Partition index
Local index
o Local prefixed
o Local non-prefixed
Global index
o Global prefixed
o Global non-prefixed
a) UNIQUE INDEX
Unique indexes guarantee that no
two rows of a table have duplicate
values in the columns that define the
index. Unique index is automatically
created when primary key or unique
constraint is created.
Ex:
SQL> create unique index stud_ind
on student(sno);
b) NON-UNIQUE INDEX
Non-Unique indexes do not impose
the above restriction on the column
values.
Ex:
SQL> create index stud_ind on
student(sno);
Ex:
SQL> create index stud_ind on
student(sno);
d) BITMAP INDEX
This can be used for low cardinality
columns: that is columns in which
the number of distinct values is small
when compared to the number of
the rows in the table.
Ex:
SQL> create bitmap index
stud_ind on student(sex);
e) COMPOSITE INDEX
A composite index also called a
concatenated index is an index
created on multiple columns of a
table. Columns in a composite index
can appear in any order and need
not be adjacent columns of the table.
Ex:
SQL> create bitmap index
stud_ind on student(sno, sname);
i) TEXT INDEX
Querying text is different from
querying data because words have
shades of meaning, relationships to
other words, and opposites. You may
want to search for words that are
near each other, or words that are
related to others. These queries
would be extremely difficult if all you
had available was the standard
relational operators. By extending
SQL to include text indexes, oracle
text permits you to ask very complex
questions about the text.
To use oracle text, you need to
create a text index on the column in
which the text is stored. Text index is
a collection of tables and indexes
that store information about the text
stored in the column.
TYPES
There are several different types of
indexes available in oracle 9i. The
first, CONTEXT is supported in oracle
8i as well as oracle 9i. As of oracle 9i,
you can use the CTXCAT text index of
further enhance your text index
management and query capabilities.
CONTEXT
CTXCAT
CTXRULE
Ex:
Suppose you have a table called
BOOKS with the following columns
Title, Author, Info.
SQL> create index book_index on
books(info) indextype is
ctxsys.context;
SQL> create index book_index on
books(info) indextype is
ctxsys.ctxcat;
TEXT QUERIES
Once a text index is created on the
info column of BOOKS table, text-
searching capabilities increase
dynamically.
CONTAINS & CATSEARCH
CONTAINS function takes two
parameters – the column name and
the search string.
Syntax:
Contains(indexed_column,
search_str);
If you create a CTXCAT index, use the
CATSEARCH function in place of
CONTAINS. CATSEARCH takes three
parameters – the column name, the
search string and the index set.
Syntax:
Contains(indexed_column,
search_str, index_set);
INDEX SYNCHRONIZATION
When using CONTEXT indexes, you
need to manage the text index
contents; the text indexes are not
updated when the base table is
updated. When the table was
updated, its text index is out of sync
with the base table. To sync of the
index, execute the SYNC_INDEX
procedure of the CTX_DDL package.
SQL> exec
CTX_DDL.SYNC_INDEX(‘book_ind
ex’);
INDEX SETS
Historically, problems with queries of
text indexes have occurred when
other criteria are used alongside text
searches as part of the where clause.
To improve the mixed query
capability, oracle features index sets.
The indexes within the index set may
be structured relational columns or
on text columns.
To create an index set, use the
CTX_DDL package to create the index
set and add indexes to it. When you
create a text index, you can then
specify the index set it belongs to.
SQL> exec
CTX_DDL.CREATE_INDEX_SET(‘bo
oks_index_set’);
PARTITION INDEX
Similar to partitioning tables, oracle
allows you to partition indexes too.
Like table partitions, index partitions
could be in different tablespaces.
LOCAL INDEXES
Local keyword tells
oracle to create a
separte index for each
partition.
In the local prefixed
index the partition key
is specified on the left
prefix. When the
underlying table is
partitioned baes on, say
two columns then the
index can be prefixed on
the first column
specified.
Local prefixed
indexes can be unique
or non unique.
Local indexes may be
easier to manage than
global indexes.
Ex:
SQL> create index stud_index on
student(sno) local;
GLOBAL INDEXES
A global index may
contain values from
multiple partitions.
An index is global
prefixed if it is
partitioned on the left
prefix of the index
columns.
The global clause
allows you to create a
non-partitioned index.
Global indexes may
perform uniqueness
checks faster than local
(partitioned) indexes.
You cannot create
global indexes for hash
partitions or sub
partitions.
Ex:
SQL> create index stud_index on
student(sno) global;
Similar to table partitions, it is
possible to move them from one
device to another. But unlike table
partitions, movement of index
partitions requires individual
reconstruction of the index or each
partition (only in the case of global
index).
Ex:
SQL> alter index stud_ind rebuild
partition p2 ;
Index partitions
cannot be dropped
manually.
They are dropped
implicitly when the data
they refer to is dropped
from the partitioned
table.
MONITORING USE OF
INDEXES
Once you turned on the monitoring
the use of indexes, then we can
check whether the table is hitting the
index or not.
To monitor the use of index use the
following syntax.
Syntax:
alter index index_name
monitoring usage;
then check for the details in
V$OBJECT_USAGE view.
If you want to stop monitoring use
the following.
Syntax:
alter index index_name no
monitoring usage;
DATA MODEL
ALL_INDEXES
DBA_INDEXES
USER_INDEXES
ALL_IND-COLUMNS
DBA-IND_COLUMNS
USER_IND_COLUMNS
ALL_PART_INDEXES
DBA_PART_INDEXES
USER_PART_INDEXE
S
V$OBJECT_USAGE
VARRAYS:-
NESTED TABLES:-
A nested table is, as its name
implies, a table within a table.
In this case it is a table that is
represented as a column within
another table. Nested table has
the same effect of varrays but
has no limit.
Ex:
1) We can create nested tables
using types and user defined
types which has no limit
a) Nested tables using pre-
defined types
SQL> Create type nt as table of
varchar(10);/
b) Nested tables using user
defined types
SQL> Create type addr as object(hno
number(3),city varchar(10));/
SQL> Create type nt as table of
addr;/
2) Using nested table in table
SQL> Create table student(no
number(2),name varchar(10),address
nt) nested table
address store as student_temp;
3) Inserting values into table
which has nested table
SQL> Insert into student values
(1,’sudha’,nt(addr(111,’hyd’)));
SQL> Insert into student values
(2,’jagan’,nt(addr(111,’hyd’),addr(22
2,’bang’)));
4) Selecting data from table
which has nested table
SQL> Select * from student;
-- This will display nested table
column data along with nested table
and adt;
SQL> Select no,name, s.* from
student s1, table(s1.address) s;
-- This will display in general format
5) Instead of s.* you can
specify the columns in nested
table
SQL> Select no,name, s.hno,s.city
from student s1,table(s1.address) s;
6) Inserting nested table data
to the existing row
SQL> Insert into table(select address
from student where no=1)
values(addr(555,’chennai’));
7) Update in nested tables
SQL> Update table(select address
from student where no=2) s set
s.city=’bombay’ where s.hno = 222;
8) Delete in nested table
SQL> Delete table(select address
from student where no=3) s where
s.hno=333;
DATA MODEL:-
ALL_COLL_TYPES
ALL_TYPES
DBA_COLL_TYPES
DBA_TYPES
USER_COLL_TYPES
USER_TYPES
FLASHBACK QUERY:-
Used to retrieve the data which
has been already committed
without going for recovery.
Flashbacks are of two
types
Time base flashback
SCN based flashback
(SCN stands for System
Change Number)
Ex:
1) Using time based flashback
a) SQL> Select *from student;
-- This will display all the rows
b) SQL> Delete student;
c) SQL> Commit; -- this will
commit the work.
d) SQL> Select *from student;
-- Here it will display nothing
e) Then execute the following
procedures
SQL> Exec
dbms_flashback.enable_at_time(
sysdate-2/1440)
f) SQL> Select *from student;
-- Here it will display the lost data
-- The lost data will come but the
current system time was used
g) SQL> Exec
dbms_flashback.disable
-- Here we have to disable the
flashback to enable it again
2) Using SCN based flashback
a) Declare a variable to store SCN
SQL> Variable s number
b) Get the SCN
SQL> Exec :s := exec
dbms_flashback.get_system_cha
nge_number
c) To see the SCN
SQL> Print s
d) Then execute the following
procedures
SQL> Exec
dbms_flashback.enable_at_syste
m_change_number(:s)
SQL> Exec
dbms_flashback.disable
EXTERNAL TABLES:-
You can use external table
feature to access external files
as if they are tables inside the
database.
When you create an external
table, you define its structure
and location within.
When you query the table, reads
the external table and returns
the results just as if the data
had been stored with in the
database.
BENEFITS OF EXTERNAL
TABLES
a) Queries of external tables
complete very quickly even
though a full table scan id
required with each access
b) You can join external tables to
each other or to standard tables
REF DEREF VALUE
REF
The ref function allows
referencing of existing
row objects.
Each of the row objects
has an object id value
assigned to it.
The object id assigned
can be seen by using ref
function.
DEREF
The deref function
performs opposite action.
It takes a reference
value of object id and
returns the value of the
row objects.
VALUE
Even though the
primary table is object
table, still it displays the
rows in general format.
To display the entire
structure of the object,
this will be used.
Ex:
1) create vendot_adt type
SQL> Create type
vendor_adt as object
(vendor_code number(2),
vendor_name
varchar(2),
vendor_address
varchar(10));/
2) create object tables
vendors and vendors1
SQL> Create table vendors
of vendor_adt;
SQL> Create table
vendors1 of vendor_adt;
3) insert the data into
object tables
SQL> insert into vendors
values(1, ‘a’, ‘hyd’);
SQL> insert into vendors
values(2, ‘b’, ‘bang’);
SQL> insert into vendors1
values(3, ‘c’, ‘delhi’);
SQL> insert into vendors1
values(4, ‘d’, ‘chennai’);
4) create another table
orders which holds the
vendor_adt type also.
SQL> Create table orders
(order_no number(2),
vendor_info ref
vendor_adt);
Or
SQL> Create table orders
(order_no number(2),
vendor_info ref
vendor_adt with rowid);
5) insert the data into
orders table
The vendor_info column in
the following syntaxes will
store object id of any table
which
is referenced by
vendor_adt object ( both
vendors and vendors1).
SQL> insert into orders
values(11,(select ref(v)
from vendors v where
vendor_code = 1));
SQL> insert into orders
values(12,(select ref(v)
from vendors v where
vendor_code = 2));
SQL> insert into orders
values(13,(select ref(v1)
from vendors1 v1 where
vendor_code =
1));
SQL> insert into orders
values(14,(select ref(v1)
from vendors1 v1 where
vendor_code =
1));
6) To see the object ids of
vendor table
SQL> Select ref(V) from
vendors v;
7) If you see the
vendor_info of orders it
will show only the object
ids not the values, to see
the values
SQL> Select
deref(o.vendor_info) from
orders o;
8) Even though the
vendors table is object
table it will not show the
adt along with data, to
see the data along with
the adt
SQL>Select * from
vendors;
This will give the data
without adt.
SQL>Select value(v) from
vendors v;
This will give the columns
data along wih the type.
REF CONSTRAINTS
Ref can also acts as
constraint.
Even though vendors1 also
holding vendor_adt, the
orders table will store the
object ids of vendors only
because it is constrained
to that table only.
The vendor_info column in
the following syntaxes will
store object ids of vendors
only.
SQL> Create table orders
(order_no number(2),
vendor_info ref
vendor_adt scope is
vendors);
Or
SQL> Create table orders
(order_no number(2),
vendor_info ref
vendor_adt constraint fk
references vendors);
OBJECT VIEWS WITH
REFERENCES
To implement the objects
and the ref constraints to
the existing tables, what
we can do? Simply drop
the both tables and
recreate with objects and
ref constrains.
But you can achieve this
with out dropping the
tables and without losing
the data by creating object
views with references.
Ex:
a) Create the following
tables
SQL> Create table
student1(no number(2)
primary key,name
varchar(2),marks
number(3));
SQL> Create table
student2(no number(2)
primary key,hno
number(3),city
varchar(10),id
number(2),foreign Key(id)
references student1(no));
b) Insert the records into
both tables
SQL> insert into
student1(1,’a’,100);
SQL> insert into
student1(2,’b’,200);
SQL> insert into
student2(11,111,’hyd’,1);
SQL> insert into
student2(12,222,’bang’,2)
;
SQL> insert into
student2(13,333,’bombay’
,1);
c) Create the type
SQL> create or replace
type stud as object(no
number(2),name
varchar(2),marks
number(3));/
d) Generating OIDs
SQL> Create or replace
view student1_ov of stud
with object identifier(or
id) (no) as
Select * from Student1;
e) Generating references
SQL> Create or replace
view student2_ov as
select
no,hno,city,make_ref(stud
ent1_ov,id)
id from Student2;
d) Query the following
SQL> select *from
student1_ov;
SQL> select ref(s) from
student1_ov s;
SQL> select values(s)
from student1_ov;
SQ> select *from
student2_ov;
SQL> select deref(s.id)
from student2_ov s;
PARTITIONS
A single logical table can
be split into a number of
physically separate pieces
based on ranges of key
values. Each of the parts
of the table is called a
partition.
A non-partitioned table
can not be partitioned
later.
TYPES
Range partitions
List partitions
Hash partitions
Sub partitions
ADVANTAGES
Reducing downtime for
scheduled maintenance,
which allows maintenance
operations to be carried
out on selected partitions
while other partitions are
available to users.
Reducing downtime
due to data failure, failure
of a particular partition
will no way affect other
partitions.
Partition independence
allows for concurrent use
of the various partitions
for various purposes.
ADVANTAGES OF
PARTITIONS BY STORING
THEM IN DIFFERENT
TABLESPACES
Reduces the possibility
of data corruption in
multiple partitions.
Back up and recovery
of each partition can be
done independently.
DISADVANTAGES
Partitioned tables
cannot contain any
columns with long or long
raw datatypes, LOB types
or object types.
RANGE PARTITIONS
a) Creating range
partitioned table
SQL> Create table
student(no
number(2),name
varchar(2)) partition by
range(no) (partition
p1 values less than(10),
partition p2 values less
than(20), partition p3
values less
than(30),partition p4
values less
than(maxvalue));
** if you are using
maxvalue for the last
partition, you can not add
a partition.
b) Inserting records into
range partitioned table
SQL> Insert into student
values(1,’a’); -- this will
go to p1
SQL> Insert into student
values(11,’b’); -- this will
go to p2
SQL> Insert into student
values(21,’c’); -- this will
go to p3
SQL> Insert into student
values(31,’d’); -- this will
go to p4
c) Retrieving records from
range partitioned table
SQL> Select *from
student;
SQL> Select *from student
partition(p1);
d) Possible operations
with range partitions
Add
Drop
Truncate
Rename
Split
Move
Exchange
e) Adding a partition
SQL> Alter table student
add partition p5 values
less than(40);
f) Dropping a partition
SQL> Alter table student
drop partition p4;
g) Renaming a partition
SQL> Alter table student
rename partition p3 to p6;
h) Truncate a partition
SQL> Alter table student
truncate partition p6;
i) Splitting a partition
SQL> Alter table student
split partition p2 at(15)
into (partition
p21,partition p22);
j) Exchanging a partition
SQL> Alter table student
exchange partition p1 with
table student2;
k) Moving a partition
SQL> Alter table student
move partition p21
tablespace saketh_ts;
LIST PARTITIONS
a) Creating list partitioned
table
SQL> Create table
student(no
number(2),name
varchar(2)) partition by
list(no) (partition p1
values(1,2,3,4,5),
partition p2
values(6,7,8,9,10),partitio
n p3
values(11,12,13,14,15),
partition p4
values(16,17,18,19,20));
b) Inserting records into
list partitioned table
SQL> Insert into student
values(1,’a’); -- this will
go to p1
SQL> Insert into student
values(6,’b’); -- this will
go to p2
SQL> Insert into student
values(11,’c’); -- this will
go to p3
SQL> Insert into student
values(16,’d’); -- this will
go to p4
c) Retrieving records from
list partitioned table
SQL> Select *from
student;
SQL> Select *from student
partition(p1);
d) Possible operations
with list partitions
Add
Drop
Truncate
Rename
Move
Exchange
e) Adding a partition
SQL> Alter table student
add partition p5
values(21,22,23,24,25);
f) Dropping a partition
SQL> Alter table student
drop partition p4;
g) Renaming a partition
SQL> Alter table student
rename partition p3 to p6;
h) Truncate a partition
SQL> Alter table student
truncate partition p6;
i) Exchanging a partition
SQL> Alter table student
exchange partition p1 with
table student2;
j) Moving a partition
SQL> Alter table student
move partition p2
tablespace saketh_ts;
HASH PARTITIONS
a) Creating hash
partitioned table
SQL> Create table
student(no
number(2),name
varchar(2)) partition by
hash(no) partitions
5;
Here automatically gives
partition names like
SYS_P1
SYS_P2
SYS_P3
SYS_P4
SYS_P5
b) Inserting records into
hash partitioned table
it will insert the records
based on hash function
calculated by taking the
partition key
SQL> Insert into student
values(1,’a’);
SQL> Insert into student
values(6,’b’);
SQL> Insert into student
values(11,’c’);
SQL> Insert into student
values(16,’d’);
c) Retrieving records from
hash partitioned table
SQL> Select *from
student;
SQL> Select *from student
partition(sys_p1);
d) Possible operations
with hash partitions
Add
Truncate
Rename
Move
Exchange
e) Adding a partition
SQL> Alter table student
add partition p6 ;
f) Renaming a partition
SQL> Alter table student
rename partition p6 to p7;
g) Truncate a partition
SQL> Alter table student
truncate partition p7;
h) Exchanging a partition
SQL> Alter table student
exchange partition sys_p1
with table student2;
i) Moving a partition
SQL> Alter table student
move partition sys_p2
tablespace saketh_ts;
SUB-PARTITIONS WITH
RANGE AND HASH
Subpartitions clause is
used by hash only. We can
not create subpartitions
with list and hash
partitions.
a) Creating subpartitioned
table
SQL> Create table
student(no
number(2),name
varchar(2),marks
number(3))
Partition by range(no)
subpartition by
hash(name) subpartitions
3
(Partition p1 values less
than(10),partition p2
values less than(20));
This will create two
partitions p1 and p2 with
three subpartitions for
each partition
P1 – SYS_SUBP1
SYS_SUBP2
SYS_SUBP3
P2 – SYS_SUBP4
SYS_SUBP5
SYS_SUBP6
** if you are using
maxvalue for the last
partition, you can not add
a partition.
b) Inserting records into
subpartitioned table
SQL> Insert into student
values(1,’a’); -- this will
go to p1
SQL> Insert into student
values(11,’b’); -- this will
go to p2
c) Retrieving records from
subpartitioned table
SQL> Select *from
student;
SQL> Select *from student
partition(p1);
SQL> Select *from student
subpartition(sys_subp1);
d) Possible operations
with subpartitions
Add
Drop
Truncate
Rename
Split
e) Adding a partition
SQL> Alter table student
add partition p3 values
less than(30);
f) Dropping a partition
SQL> Alter table student
drop partition p3;
g) Renaming a partition
SQL> Alter table student
rename partition p2 to p3;
h) Truncate a partition
SQL> Alter table student
truncate partition p1;
i) Splitting a partition
SQL> Alter table student
split partition p3 at(15)
into (partition
p31,partition p32);
DATA MODEL
ALL_IND_PARTITIONS
ALL_IND_SUBPARTITI
ONS
ALL_TAB_PARTITIONS
ALL_TAB_SUBPARTITI
ONS
DBA_IND_PARTITIONS
DBA_IND_SUBPARTITI
ONS
DBA_TAB_PARTITIONS
DBA_TAB_SUBPARTITI
ONS
USER_IND_PARTITION
S
USER_IND_SUBPARTIT
IONS
USER_TAB_PARTITION
S
USER_TAB_SUBPARTIT
IONS
SQL*PLUS COMMNANDS:-
1) BREAK
This will be used to break up the
data depending on the grouping.
Syntax:
Break or bre [on <column_name> on
report]
2) COMPUTE
This will be used to perform
group functions on the data.
Syntax:
Compute or comp [group_function
of column_name on
breaking_column_name or
report]
3) TTITLE
This will give the top title for
your report. You can on or off
the ttitle.
Syntax:
Ttitle or ttit [left | center | right]
title_name skip n other_characters
Ttitle or ttit [on or off]
4) BTITLE
This will give the bottom title for
your report. You can on or off
the btitle.
Syntax:
Btitle or btit [left | center | right]
title_name skip n other_characters
Btitle or btit [on or off]
Ex:
SQL> bre on department_id skip 1 on
report
SQL> comp sum of salary on
department_id
SQL> comp sum of salary on report
SQL> ttitle center 'EMPLOYEE
DETAILS' skip1 center '----------------'
SQL> btitle center '** THANKQ **'
SQL> select * from employees order
by department_id;
5) CLEAR
This will clear the existing
buffers or break or computations
or columns formatting.
Syntax:
Clear or cle buffer | bre | comp | col
| screen;
Ex:
SQL> clear buffer //Buffer cleared
SQL> clear bre //Breaks cleared
SQL> clear comp //Computes cleared
SQL> clear col //Columns cleared
6) CHANGE
This will be used to replace any
strings in SQL statements.
Syntax:
Change or c/old_string/new_string
If the old_string repeats many
times then new_string replaces
the first string only.
Ex:
SQL> select * from dept; // this
query will result an error if table
doesn’t exists.
SQL> c/det/dept
1* select * from dept
SQL> /
7) COLUMN
This will be used to increase or
decrease the width of the table
columns.
Syntax:
Column or col <column_name>
format <num_format|text_format>
Ex:
SQL> col deptno format 999
SQL> col dname format a10
8) SAVE
This will be used to save your
current SQL statement as SQL
Script file.
Syntax:
Save or sav <file_name>.[extension]
replace or rep
If you want to save the filename
with existing filename the you
have to use replace option.
By default it will take sql as the
extension.
Ex:
SQL> save ss
Created file ss.sql
SQL> save ss replace
Wrote file ss.sql
9) EXECUTE
This will be used to execute
stored subprograms or packaged
subprograms.
Syntax:
Execute or exec
<subprogram_name>
Ex:
SQL> exec sample_proc
10) SPOOL
This will record the data when
you spool on, upto when you
say spool off. By default it will
give lst as extension.
Syntax:
Spool on | off | out |
<file_name>.[Extension]
Ex:
SQL> spool on
SQL> select * from dept;
SQL> spool off
SQL> ed on.lst
SQL> select * from dept;
SQL> spool off
11) LIST
This will give the current SQL
statement.
Syntax:
List or li [start_line_number]
[end_line_number]
Ex:
SQL> select
2*
3 from
4 dept;
SQL> list
1 select
2*
3 from
4* dept
SQL> list 1
1* select
SQL> list 3
3* from
SQL> list 1 3
1 select
2*
3* from
12) INPUT
This will insert the new line to
the current SQL statement.
Syntax:
Input or in <string>
Ex:
SQL> select *
SQL> list
1* select *
SQL> input from dept
SQL> list
1 select *
2* from dept
13) APPEND
This will adds a new string to
the existing string in the SQL
statement without any space.
Syntax:
Append or app <string>
Ex:
SQL> select *
SQL> list
1* select *
SQL> append from dept
1* select * from dept
SQL> list
1* select * from dept
14) DELETE
This will delete the current SQL
statement lines.
Syntax:
Delete or del <start_line_number>
[<end_line_number>]
Ex:
SQL> select
2*
3 from
4 dept
5 where
6 deptno
7 >10;
SQL> list
1 select
2*
3 from
4 dept
5 where
6 deptno
7* >10
SQL> del 1
SQL> list
1*
2 from
3 dept
4 where
5 deptno
6* >10
SQL> del 2
SQL> list
1*
2 dept
3 where
4 deptno
5* >10
SQL> del 2 4
SQL> list
1*
2* >10
SQL> del
SQL> list
1*
15) VARIABLE
This will be used to declare a
variable.
Syntax:
Variable or var <variable_name>
<variable_type>
Ex:
SQL> var fname varchar2(15)
SQL> begin
select first_name into : fname
from employees where employee_id
=107;
end;
/
16) PRINT
This will be used to print the
output of the variables that will
be declared at SQL level.
Syntax:
Print <variable_name>
Ex:
SQL> print fname
17) START
This will be used to execute SQL
scripts.
Syntax:
start <filename_name>.sql
Ex:
SQL> start ss.sql
SQL> @ss.sql -- this will execute sql
script files only.
18) HOST
This will be used to interact with
the OS level from SQL.
Syntax:
Host [operation]
Ex:
SQL> host
SQL> host dir
19) SHOW
Using this, you can see several
commands that use the set
command and status.
Syntax:
Show all | <set_command>
Ex:
SQL> show all
SQL> show verify
20) RUN
This will runs the command in
the buffer.
Syntax:
Run | /
Ex:
SQL> run
SQL> /
21) STORE
This will save all the set
command statuses in a file.
Syntax:
Store set <filename>.[extension]
[create] | [replace] | [append]
Ex:
SQL> store set my_settings.scmd
Created file my_settings.scmd
SQL> store set my_settings.cmd
replace
Wrote file my_settings.cmd
SQL> store set my_settings.cmd
append
Appended file to my_settings.cmd
22) FOLD_AFTER
This will fold the columns one
after the other.
Syntax:
Column <column_name> fold_after
[no_of_lines]
Ex:
SQL> col deptno fold_after 1
SQL> col dname fold_after 1
SQL> col loc fold_after 1
SQL> set heading off
SQL> select * from dept;
23) FOLD_BEFORE
This will fold the columns one
before the other.
Syntax:
Column <column_name>
fold_before [no_of_lines]
24) DEFINE
This will give the list of all the
variables currently defined.
Syntax:
Define [variable_name]
Ex:
SQL> define
SET COMMANDS:-
These commands does not
require statement terminator
and applicable to the sessions,
those will be automatically
cleared when session was
closed.
1) LINESIZE
This will be used to set the line
size. Default line size is 80.
Syntax:
Set linesize <value>
Ex:
SQL> set linesize 100
2) PAGESIZE
This will be used to set the
pagesize. Default pagesize is 14.
Syntax:
Set pagesize <value>
Ex:
SQL> set pagesize 30
3) DESCRIBE
This will be used to see the
object’s structure.
Syntax:
Describe or desc <object_name>
Ex:
SQL> desc dept
4) PAUSE
When the displayed data
contains hundreds or thousands
of lines, when you select it then
it will automatically scrolls and
displays the last page data. To
prevent this you can use this
pause option. By using this it
will display the data
corresponding to the pagesize
with a break which will continue
by hitting the return key. By
default this will be off.
Syntax:
Set pause on | off
Ex:
SQL> set pause on
5) FEEDBACK
This will give the information
regarding how many rows you
selected the object. By default
the feedback message will be
displayed, only when the object
contains more than 5 rows.
Syntax:
Set feedback <value>
Ex:
SQL> set feedback 4
SQL> select * from dept;
6) HEADING
If you want to display data
without headings, then you can
achieve with this. By default
heading is on.
Syntax:
Set heading on | off
Ex:
SQL> set heading off
SQL> select * from dept;
7) SERVEROUTPUT
This will be used to display the
output of the PL/SQL programs.
By default this will be off.
Syntax:
Set serveroutput on | off
Ex:
SQL> set serveroutput on
8) TIME
This will be used to display the
time. By default this will be off.
Syntax:
Set time on | off
Ex:
SQL> set time on
9) TIMING
This will give the time taken to
execute the current SQL
statement. By default this will
be off.
Syntax:
Set timing on | off
Ex:
SQL> set timing on
SQL> select * from dept;
10) SQLPROMPT
This will be used to change the
SQL prompt.
Syntax:
Set sqlprompt <prompt>
Ex:
SQL> set sqlprompt 'ORACLE>'
11) SQLCASE
This will be used to change the
case of the SQL statements. By
default the case is mixed.
Syntax:
Set sqlcase upper | mixed | lower
Ex:
SQL> set sqlcase upper
12) SQLTERMINATOR
This will be used to change the
terminator of the SQL
statements. By default the
terminator is ;.
Syntax:
Set sqlterminator
<termination_character>
Ex:
SQL> set sqlterminator :
SQL> select * from dept:
13) DEFINE
By default if the & character
finds then it will treat as bind
variable and ask for the input.
Suppose you want to treat it as
a normal character while
inserting data, then you can
prevent this by using the define
option. By default this will be on
Syntax:
Set define on | off
Ex:
SQL>insert into dept
values(50,'R&D','HYD');
14) NEWPAGE
This will shows how many blank
lines will be left before the
report. By default it will leave
one blank line.
Syntax:
Set newpage <value>
Ex:
SQL> set newpage 10
15) HEADSEP
This allow you to indicate where
you want to break a page title or
a column heading that runs
longer than one line. The default
heading separator is vertical bar
(|).
Syntax:
Set headsep <separation_char>
Ex:
SQL> select * from dept;
SQL> set headsetp !
SQL> col dname heading
'DEPARTMENT ! NAME'
SQL> /
16) ECHO
When using a bind variable, the
SQL statement is maintained by
echo. By default this is off.
Syntax:
Set echo on | off
17) VERIFY
When using a bind variable, the
old and new statements will be
maintained by verify. By default
this is on.
Syntax:
Set verify on | off
Ex:
SQL> select * from dept where
deptno = &dno;
Enter value for dno: 10
SQL> set verify off
SQL> select * from dept where
deptno = &dno;
Enter value for dno: 20
18) PNO
This will give displays the page
numbers. By default the value
would be zero.
Ex:
SQL> col hiredate new_value xtoday
noprint format a1 trunc
SQL> ttitle left xtoday right 'page'
sql.pno
SQL> select * from emp where
deptno = 10;
Procedures
--grant create procedure to hr;
--grant create any procedure to hr;
--grant alter any procedure to hr;
--grant execute
<schema_name>.<procedure_nam
e> to hr;
--alter session set
PLSQL_CODE_TYPE = NATIVE;
--alterprocedure <proceurename>
compile PLSQL_CODE_TYPE =
NATIVE;
--alter procedure <proceurename>
compile;
--alter session set
PLSQL_OPTIMIZE_LEVEL
=[0,1,2,3]
--select PLSQL_OPTIMIZE_LEVEL,
PLSQL_CODE_TYPE from
all_plsql_object_settings;
--alter procedure <proceurename>
compile debug;