Oracle 12c New Features for Developers

Preview:

Citation preview

Oracle 12c New Features for Developers

By Complete IT Professional

www.completeitprofessional.com

Oracle 12c

• Released in 2013

• Contains a lot of new features

• Some are useful for DBAs, some are useful for developers, some for both

• As a developer, what do you need to know?

• I wrote an entire post on it:

http://www.completeitprofessional.com/oracle-12c-new-features-for-developers

• These slides explain all of those features

Increased column size limits

• VARCHAR2, NVARCHAR2, and RAW are larger than previous Oracle versions

Data Type Oracle 11g

Limit

Oracle 11g

PL/SQL Limit

Limit in

Oracle 12c

VARCHAR2 2K 4K 32K

NVARCHAR2 2K 4K 32K

RAW 2K 4K 32K

Increased column size limits

• How can you use the new sizes?

• Change the setting called MAX_STRING_SIZE within the init.orafile

• STANDARD – old sizes

• EXTENDED – new sizes

APPROX_COUNT_DISTINCT

• New function – APPROX_COUNT_DISTINCT

• Gives you an approximate count of records

• Faster than COUNT

• Not 100% accurate but pretty close

Row Limiting with Top N

• Getting the top N rows can be hard in Oracle

• In Oracle 12c, you can use new syntax

• FETCH FIRST 10 ROWS ONLY – shows only the first 10 rows

Row Limiting with Top N

SELECT first_name, last_name, date_of_birth

FROM student

ORDER BY date_of_birth

FETCH FIRST 10 ROWS ONLY;

Pattern Matching

• Pattern matching is easier in Oracle 12c

• Uses the MATCH_RECOGNIZE keyword

Pattern Matching Syntax

SELECT columns

FROM table

MATCH_RECOGNIZE (

PARTITION BY ...

ORDER BY ...

MEASURES ...

PATTERN...

DEFINE...

)

ORDER BY col1...

JSON in Database

• Oracle 12c now support JSON in database columns

• You can query directly inside the column data

JSON Example{

“businessName”:”Cars Galore”,

“address”:{

“streetNumber”:”14”,

“streetName”:”Main Street”,

“city”:”Denver”,

“state”:”Colorado”,

“country”:”USA”},

“businessIndustry”:”Automotive”

}

SELECT

b.document.businessName,

b.document.address.streetNumber,

b.document.address.streetName

FROM businesses b

Lateral Clause for Inline Views

• Normally you can’t refer to columns outside an inline view from within the inline view

• With a LATERAL clause, you can

Lateral Clause Example

SELECT first_name, last_name, school_name

FROM student s,

LATERAL (SELECT school_name

FROM school sc

WHERE sc.school_id = s.school_id)

CROSS APPLY Clause

• Similar to Lateral

• Variant of the CROSS JOIN

• Right side of the keyword can reference the column on the left

CROSS APPLY Example

SELECT first_name, last_name, school_id, school_name

FROM student s,

CROSS APPLY (SELECT school_name

FROM school sc

WHERE sc.school_id = s.school_id

AND sc.school_state = ‘California’)

OUTER APPLY Clause

• Similar to CROSS APPLY

• More like a LEFT OUTER JOIN

OUTER APPLY Example

SELECT first_name, last_name, school_id, school_name

FROM student s,

OUTER APPLY (SELECT school_name

FROM school sc

WHERE sc.school_id = s.school_id

AND sc.school_state = ‘California’)

Partial Join Evaluation

• New optimisation type

• Part of the optimisation process

• You might see it in the Explain Plan

• Partial Join Evaluation

• Also called PJE

Cascading Truncate

• Have you tried to TRUNCATE a table that had other records referring to it, and got an error about foreign keys?

• With Oracle 12c, you can run a TRUNCATE CASCADE

• This will skip this error and delete the rows that refer to it

• Only works if the foreign key is defined as ON DELETE CASCASE

Cascading Truncate Example

TRUNCATE TABLE parent_table_name CASCADE;

Pluggable Databases

• One of the main features in Oracle 12c

• A “root” database is created

• “Seed” database is a template for creating other databases

• “Pluggable databases” are where the data is stored

• All inside the root

Why pluggable databases?

• Easier maintenance

• Easier implementation of new databases – just copy the seed

• Easier to move to the cloud

Invisible Columns

• Columns that do not appear in the table definition or SELECT * statements

• Use the INVISIBLE keyword when defining a column

Invisible Indexes

• Allows more than one index on a column at one time

• Create index and add the INVISIBLE keyword

Identity Columns

• Set a column to automatically generate a value

• Similar to AUTO_INCREMENT in other databases

• Add GENERATED AS IDENTITY to column definition when creating a table

Default Values

• Simplify data entry

• Use sequences as the default values

• Or use default values only when a NULL is specified

Session Sequences

• Sequences currently keep their values for the database for all sessions

• Session sequences are new

• They let you retain the value only for the session

• Not very useful for primary keys, but there are other uses

Sequence KEEP and NOKEEP

• KEEP and NOKEEP are keywords for creating sequences

• KEEP retains the NEXTVALUE value for replays during Application Continuity

• NOKEEP will not retain the NEXTVALUE for these replays

• NOKEEP is the default

Data Redaction

• You can hide certain fields in certain ways

• Replace characters with spaces or numbers

• Or, change part of the information

• Good security feature

Grant Roles to PL/SQL Programs Only

• Previously, you had to grant user access to the PL/SQL program and the table

• Now, just grant user access to the PL/SQL program

• Program will still access the table

• Makes it more secure

UTL_CALL_STACK Package

• Improvements to the call stack

• Use the UTL_CALL_STACK package to get information about your call stack

PL/SQL ACCESSIBLE BY Clause

• Allows you to specify which packages can access other packages

• Helps with security

• Simplifies package definition if you want to implement this

• Add the words ACCESSIBLE BY to the package when defining

PL/SQL Table Operator

• Before 12c, you could only use the TABLE operator in some situations

• Now, you can use them with locally defined types

WITH Clause and PL/SQL Functions

• Now you can define PL/SQL functions and procedures inside a WITH clause

• Likely improves run time

• Object is not created and stored in the database

Online DDL Statements

• DDL normally locks tables

• Some statements can now be run in “online” mode, which does not impact any DML that is running

• Statements relate to indexes, constraints, and columns

DDL Logging

• You can enable DDL logging

• Many DDL statements are captured

• CREATE/ALTER/DROP/TRUNCATE TABLE

• CREATE/ALTER/DROP PACKAGE/FUNCTION/VIEW/SYNONYM/SEQUENCE

• DROP USER

Bequeath Option

• Allows you to specify which user’s privileges will be used when running a statement

• Specify either invoker’s or definer’s rights

• Invoker’s rights – the person running the statement

• Definer’s rights – the person who created the object

Period Definition

• Allows you to easily specify which records are valid at a particular date

• Use the PERIOD clause when creating a table

• You can then use the PERIOD clause in SELECT queries

Conclusion

• Many new features in Oracle 12c

• These are all of the features I think are helpful for new developers

• Find out more here:

http://www.completeitprofessional.com/oracle-12c-new-features-for-developers

Recommended