You are on page 1of 15

1

Introduction to 10g New Features of SQL

Oracle 10g Report


NEW DATATYPES
ADDED TO ORACLE 10g

•BINARY_FLOAT
•BINARY_DOUBLE
•SDO_GEORASTER
•SI_STILLIMAGE and six more related data
types to it which are as
follows:
•SI_COLOR
•SI_AVERAGECOLOR
•SI_COLOURHISTOGRAM
•SI_TEXTURE
•SI_POSITIONALCOLOR
•SI_FEATURELIST
Oracle 10g SQL
MERGE STATEMENT

MERGE INTO bonuses D


USING (SELECT employee_id, salary,
department_id FROM employees
WHERE department_id = 80) S
ON (D.employee_id = S.employee_id)
WHEN MATCHED THEN UPDATE SET D.bonus =
D.bonus + S.salary*.01
DELETE WHERE (S.salary > 8000)
WHEN NOT MATCHED THEN INSERT
(D.employee_id, D.bonus)
VALUES (S.employee_id, S.salary*0.1)
WHERE (S.salary <= 8000);
Oracle 10g SQL
Improvement in Merge Statement

1) The update and insert statement is optional.

2) You can do a conditional UPDATE for a merge.

3) You can perform a conditional INSERT using


the WHERE clause.

4) It has a new ON constant filter predicate to


insert all rows to the target without joining
source and target tables.

5) An optional DELETE clause can remove rows


while performing UPDATE.
Oracle 10g SQL
MERGE statement with both INSERT and
UPDATE clause separately
1) MERGE INTO employees e
USING new_employees n
On (e.department_id=n.department_id)
WHEN MATCHED THEN
UPDATE
SET e.last_name=n.last_name
e.salary=n.salary ;
2) MERGE INTO employees e
USING new_employees n
On (e.department_id=n.department_id)
WHEN NOT MATCHED THEN
INSERT VALUES ( n.last_name,n..salary) ;
Oracle 10g SQL
UNCONDITIONAL INSERTS

You can insert rows from the source table to the


target table without joining the source and target

MERGE INTO employees e


UI|SING new_employees n
ON(1=0)
WHEN NOT MATCHED THEN
INSERT
VALUES(n.employeet_id,n.last_name,n.email)
WHERE n.last_name=‘King’;

Oracle 10g SQL


New DELETE Clause

Here we merge the rows from NEW_EMPLOYEES into


EMPLOYEES and delete any rows from EMPLOYEES
whose JOB_ID=SA_REP
MERGE INTO employees e
USING new_employees n
ON (e.employee_id=n.employee_id)
WHEN MATCHED THEN
UPDATE
SET e.last_name=n.last_name,
e.job_id=n.job_id
DELETE WHERE (e.job_id=‘SA_REP’)
WHEN NOT MATCHED THEN
INSERT
VALUES(n.employee_id,n.last_name,n.job_id)

Oracle 10g SQL


Working with Regular Expressions
Functions

There are four functions that support regular


expressions which are as follows:-

1) REGEXP_LIKE

2) REGEXP_INSTR

3) REGEXP_REPLACE

4) REGEXP_SUBSTR

Oracle 10g SQL


REGEXP_LIKE

Find the employees whose first name starts with a


vowel, whose second character is an L, and whose
first name is at least six character long

Select first_name, last_name


from EMPLOYEES
WHERE REGEXP_LIKE(first_name, ‘^[aeiou] l ’, ‘i’)
and REGEXP_LIKE(first_name ‘[ [ :alpha: ]] {6,} ’)

Oracle 10g SQL


REGEXP_INSTR

The Syntax of the following function is as follows:

REGEXP_INSTR(source_string,pattern[,position[,occur
rence[,return_option [,match_parameter] ] ] ] )
Show the position of the second occurrence of a
vowel in the first name of employees , with case-
insensitive searching from the first character.

Select first_name, REGEXP_INSTR


(first_name, ‘ [aeiou] ’ ,1,2,0,’i’ ) REGINSTR
from EMPLOYEES
WHER last_name like ‘S%’
Oracle 10g SQL
Case and Accent- Insensitive Queries
The following SQL clauses support the NLS_SORT
setting:

1) WHERE
2) ORDER BY
3) START WITH
4) HAVING
5) IN and NOT IN
6) BETWEEN
7) CASE…… WHEN
Oracle 10g SQL
Quote Operator

By using the quote operator we can use the ‘ !


And ! ‘ instead of using the single quotation marks
for the string literals.
The syntax is as follows:-

SELECT q ‘ ! Don’t look at john’s bike ! Wow!’ string


From DUAL;

Oracle 10g SQL


REGEXP_REPLACE

It extends the functionality of the replace function.


The syntax is as follows:-
REGEXP_REPLACE (Source_string,pattern[,position
[ ,occurrence [,match_parameter] ] ] )

SELECT REGEXP_REPLACE(‘ANDREW, HUDSON’, ’


(.+ ) ,( .* ) ’, ’ \2 \1’ ) FIRST
from DUAL;
SELECT REGEXP_REPLACE(‘ANDREW, HUDSON’, ’
( .+ ) ,( .* ) ’, ’ \2 \1’ ) SECOND
from DUAL
Oracle 10g SQL
REGEXP_SUBSTR

This function extends the functionality of the substr function


and is quite similar to REGEXP_REPLACE.

The syntax is as follows:

REGEXP_SUBSTR(source_string ,pattern [,position


{,occurrence [,match_parameter ] ] ] )

SELECT REGEXP_SUBSTR(‘xyz@oracle.com’, ’@.* ’ ) E-MAIL


from DUAL;

Oracle 10g SQL


Some More Character Function

REPLACE FUNCTION

The following example replaces occurrences of J with


BL:

SELECT REPLACE('JACK and JUE','J','BL') "Changes"


FROM DUAL;
Changes
--------------
BLACK and BLUE

Oracle 10g SQL

You might also like