five oracle 12c sql, pl/sql new features to take advantage of

37
Five Oracle 12c SQL, PL/SQL New Features To Take Advantage Of John Mullins [email protected] www.themisinc.com

Upload: others

Post on 15-Mar-2022

31 views

Category:

Documents


0 download

TRANSCRIPT

Presenter

John Mullins

Themis Inc. ([email protected])

30+ years of Oracle experience

Oracle Certified Professional DBA

Certified Technical Trainer

Over 300 classes taught

Themis Inc.

More than 18 years in the industry

More than 90,000 students have attended a

Themis training event

Courses:

DB2, SQL Server, Oracle, Unix, Linux, Java, Web

Development, .NET and many more

www.themisinc.com

Related Themis Courses

Oracle 12c New Features for Developers

Oracle 12c New Features for Administrators

Introduction to Oracle SQL

Oracle Advanced SQL

Introduction to PL/SQL

Advanced PL/SQL

Webinar Objectives

Gain an understanding of some of the SQL,

PL/SQL new features in Oracle 12c

Oracle 12c SQL New Feature

Top-n Queries:

Row Limiting Clause

FETCH FIRST/NEXT and OFFSET Clauses

Retrieve first n records from a result set

Retrieve the first n records after skipping over a set of

records

ANSI Standard

Table used in Examples

Table: DAILY_ATTENDANCEATT_DATE ATTENDANCE

--------- ----------

01-JAN-14 1714

02-JAN-14 1238

03-JAN-14 1004

04-JAN-14 4656

24-DEC-14 1349

25-DEC-14 0

26-DEC-14 1147

27-DEC-14 6577

FETCH FIRST Clause

Example:

Return the 5 attendance dates with the highest

attendances

FETCH FIRST Clause

SELECT * FROM

(SELECT * FROM daily_attendance

ORDER BY attendance desc) WHERE rownum <= 5;

SELECT * FROM daily_attendance

ORDER BY attendance desc

FETCH FIRST 5 ROWS ONLY;

ATT_DATE ATTENDANCE

--------- ----------

19-OCT-14 6972

27-SEP-14 6941

01-NOV-14 6941

20-JUL-14 6892

08-NOV-14 6891

FETCH FIRST Clause

SELECT * FROM daily_attendance

ORDER BY attendance desc

FETCH FIRST 5 ROWS WITH TIES;

ATT_DATE ATTENDANCE

--------- ----------

19-OCT-14 6972

27-SEP-14 6941

01-NOV-14 6941

20-JUL-14 6892

08-NOV-14 6891

01-DEC-14 6891

FETCH FIRST Clause

SELECT * FROM daily_attendance

ORDER BY attendance desc

FETCH FIRST 3 PERCENT ROWS ONLY;

ATT_DATE ATTENDANCE

--------- ----------

19-OCT-14 6972

01-NOV-14 6941

27-SEP-14 6941

20-JUL-14 6892

01-DEC-14 6891

08-NOV-14 6891

19-APR-14 6844

05-OCT-14 6829

23-FEB-14 6780

22-NOV-14 6725

25-MAY-14 6715

OFFSET Clause

SELECT * FROM daily_attendance

ORDER BY attendance desc

OFFSET 5 ROWS

FETCH NEXT 3 ROWS ONLY;

ATT_DATE ATTENDANCE

--------- ----------

01-DEC-14 6891

19-APR-14 6844

05-OCT-14 6829

Oracle 12c: SQL, PL/SQL

New Feature

Function / Procedure in WITH Clause:

Define PL/SQL functions and procedures as in-line

constructs

Pros:

No DBA maintenance effort is needed

No context switch is necessary when going from SQL to

PL/SQL

Cons:

Function / Procedure cannot be reused

Function in WITH Clause

Example 1WITH

FUNCTION annual_comp

(p_sal IN NUMBER, p_comm IN NUMBER)

RETURN number AS

BEGIN

RETURN (p_sal*12 + NVL(p_comm,0));

END;

SELECT ename, annual_comp(sal,comm)

FROM emp;

/

Function / Procedure in

WITH Clause Example 2WITH

PROCEDURE add_data (p_sal IN NUMBER, p_comm IN NUMBER, p_total OUT NUMBER)

AS

BEGIN

p_total := p_sal*12 + NVL(p_comm,0);

END;

FUNCTION annual_comp (p_sal IN NUMBER, p_comm IN NUMBER)

RETURN number AS

v_total NUMBER;

BEGIN

add_data (p_sal, p_comm, v_total);

RETURN (v_total);

END;

SELECT ename, annual_comp(sal,comm)

FROM emp;

/

Oracle 12c: SQL New Feature

Row Pattern Matching:

Search for pattern matches within a column but

across more than one row

Usage

Trend Analysis

Identify Data Patterns (esp. in large data sets)

Quality Control Processing

Market Analysis

Row Pattern Matching

Clauses and Options

MATCH_RECOGNIZE

PARTITION BY

ORDER BY

MEASURES

ROW PATTERN ROWS PER MATCH

PATTERN

DEFINE

MEASURES and PATTERN

Clauses

MEASURES

Navigation Functions

PREV, NEXT, FIRST, LAST

PATTERN

Iteration Quantifiers

* zero or more, + one or more, ? zero or one

{n,} n or more, {n,m} between n and m

{,m} between zero and m

{n} exactly n

Row Pattern Matching Example 1

Daily Attendance

Find patterns of declining attendance of 3 straight

days

Declining Attendance Example

SELECT * FROM daily_attendance

MATCH_RECOGNIZE (

ORDER BY attendance_date

MEASURES

A.attendance_date AS high_date,

LAST (DOWN.attendance) low_attendance,

LAST (DOWN.attendance_date) low_date

ONE ROW PER MATCH

AFTER MATCH SKIP TO NEXT ROW

PATTERN (A DOWN {3})

DEFINE

DOWN AS DOWN.attendance < PREV (DOWN.attendance))

arep;

Declining Attendance Result

HIGH_DATE LOW_ATTENDANCE LOW_DATE

--------- -------------- ---------

11-JAN-14 1001 14-JAN-14

01-FEB-14 1095 04-FEB-14

09-FEB-14 1043 12-FEB-14

15-MAR-14 1680 18-MAR-14

22-MAR-14 1209 25-MAR-14

23-MAR-14 1065 26-MAR-14

12-APR-14 1401 15-APR-14

19-APR-14 1116 22-APR-14

07-JUN-14 1141 10-JUN-14

08-JUN-14 1018 11-JUN-14

Table used in Example 2

Table: CC_TRANS

TRANS_ID CC_NUM TRANS_AMT TRANS_DAT TRANS_ST

---------- ----------------- ---------- --------- ---------

1000 1000340022208990 2300.49 02-MAR-15 10

1001 1000340022208990 1290.99 02-MAR-15 10

1002 1000340022208990 17.99 02-MAR-15 10

1003 2100455578809090 120.25 03-MAR-15 20

1004 2100455578809090 110.2 03-MAR-15 30

1005 1000340022208990 3100.33 04-MAR-15 10

1006 1000340022208990 2230.45 04-MAR-15 10

Row Pattern Matching Example 2

Credit Card Transactions

Find patterns where the same credit card number

was used physically in two different locations (states)

on the same day

Credit Card Location Example

SELECT * FROM cc_trans

MATCH_RECOGNIZE (

PARTITION BY cc_num

ORDER BY trans_date, trans_st

MEASURES

A.cc_num AS ccnum,

a.trans_date AS tdate

ONE ROW PER MATCH

AFTER MATCH SKIP TO NEXT ROW

PATTERN (A B+)

DEFINE

B as TRUNC(trans_date) = PREV (TRUNC(trans_date)) AND

trans_st <> PREV (trans_st)

) trans

ORDER BY tdate;

Credit Card Location Example

CCNUM Multiple Trans on:

----------------- --------------------

2100455578809090 03-MAR-15

1000340022208990 04-MAR-15

Oracle 12c PL/SQL New Feature

PL/SQL Subprogram White Lists:

Define the PL/SQL program units that have access

to a specific PL/SQL program unit

The ACCESSIBLE BY Clause

PL/SQL Subprogram White Lists

CREATE or replace FUNCTION annual_comp (p_sal IN NUMBER, p_comm IN NUMBER)

RETURN number AS

v_total NUMBER;

BEGIN

add_data (p_sal, p_comm, v_total);

RETURN (v_total);

END;

CREATE or replace PROCEDURE add_data

(p_sal IN NUMBER, p_comm IN NUMBER, p_total OUT NUMBER)

ACCESSIBLE BY (annual_comp)

AS

BEGIN

p_total := p_sal*12 + NVL(p_comm,0);

END;

PL/SQL Subprogram White Lists

DECLARE

v_total NUMBER;

BEGIN

add_data (5000,1000,v_total);

END;

/

add_data (5000,1000,v_total);

*

ERROR at line 4:

ORA-06550: line 4, column 5:

PLS-00904: insufficient privilege to access object ADD_DATA

ORA-06550: line 4, column 5:

PL/SQL: Statement ignored

PL/SQL Subprogram White Lists

SELECT annual_comp (5000,1000) FROM dual;

ANNUAL_COMP(5000,1000)

----------------------

61000

Oracle 12c SQL New Feature

Invisible Columns:

Statements that do not directly reference the

invisible column will not see that column

Columns can be made invisible when using

CREATE TABLE, CREATE VIEW, ALTER

VIEW, ALTER TABLE

Benefits:

The ability to introduce a change while minimizing any

negative side effects of that change

Invisible Columns

ALTER TABLE empl_data

MODIFY sal INVISIBLE;

Table altered.

DESCRIBE empl_data -- NOTE: sal column is NOT displayed

Name Null? Type

----------------------------------------- -------- ---------------

EMPNO NOT NULL NUMBER(4)

ENAME VARCHAR2(10)

JOB VARCHAR2(9)

MGR NUMBER(4)

HIREDATE DATE

COMM NUMBER(7,2)

DEPTNO NUMBER(2)

Invisible Columns

SELECT * FROM empl_data; -- sal is NOT displayed

EMPNO ENAME JOB MGR HIREDATE COMM DEPTNO

---------- ---------- --------- ---------- --------- ---------- ----------

7369 SMITH CLERK 7902 17-DEC-80 20

7499 ALLEN SALESMAN 7698 20-FEB-81 300 30

SELECT ename, sal, deptno FROM empl_data; -- sal is displayed

ENAME SAL DEPTNO

---------- ---------- ----------

SMITH 800 20

ALLEN 1600 30

Other Oracle 12c SQL New

Features

Cascading TRUNCATETRUNCATE TABLE tname CASCADE;

Identity ColumnsCREATE TABLE acct_trans

(trans_id NUMBER GENERATED AS identity PRIMARY KEY,

trans_date DATE);

Other Oracle 12c PL/SQL New

Features

DBMS_UTILITY

UTL_CALL_STACK program

DBMS_SCHEDULER

Two New job Types

SQL_SCRIPT

BACKUP_SCRIPT

Granting a role to a PL/SQL program

Summary

Oracle 12c introduces several powerful and

useful SQL and PL/SQL new features

Questions?

[email protected]

Upcoming Webinars

Enhanced Production Explain Tables in DB2 11

for z/OS

June 15 11:30am ET

Minimize your trips to DB2 for z/OS and

reduce your elapsed and CPU times

August 17 11:30am ET

For More Information

Visit the Themis web site www.themisinc.com

John Caccavale

[email protected]

908-233-8900

To get a copy of the presentation:

http://www.themisinc.com/webinars

Thank you for attending. Have a good day.