Five Oracle 12c SQL, PL/SQL New Features To Take Advantage Of
Transcript of Five Oracle 12c SQL, PL/SQL New Features To Take Advantage Of
Five Oracle 12c SQL,
PL/SQL New Features
To Take Advantage Of
John Mullins
www.themisinc.com
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
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
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?
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
908-233-8900
To get a copy of the presentation:
http://www.themisinc.com/webinars
Thank you for attending. Have a good day.