contents at a glance - mhp-assets.s3.amazonaws.com · oracle tight / oracle database 12c pl/sql...

14
Contents at a Glance PART I Oracle PL/SQL 1 Oracle PL/SQL Development Overview 3 2 New Features 17 3 PL/SQL Basics 43 4 Language Fundamentals 111 5 Control Structures 153 6 Collections 217 7 Error Management 261 PART II PL/SQL Programming 8 Functions and Procedures 293 9 Packages 347 10 Large Objects 385 11 Object Types 449 12 Triggers 491 13 Dynamic SQL 545 PART III Appendixes and Glossary A Oracle Database Primer 595 B SQL Primer 695 v

Upload: vuonganh

Post on 29-Oct-2018

261 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Contents at a Glance - mhp-assets.s3.amazonaws.com · Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM / vi vi Oracle Database 12c PL/SQL

Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM / v

Contents at a Glance

PART IOracle PL/SQL

1 Oracle PL/SQL Development Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2 New Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3 PL/SQL Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

4 Language Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

5 Control Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

6 Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217

7 Error Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261

PART IIPL/SQL Programming

8 Functions and Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

9 Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347

10 Large Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385

11 Object Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449

12 Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491

13 Dynamic SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545

PART IIIAppendixes and Glossary

A Oracle Database Primer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595

B SQL Primer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695

v

00-FM.indd 5 12/17/13 12:11 PM

Page 2: Contents at a Glance - mhp-assets.s3.amazonaws.com · Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM / vi vi Oracle Database 12c PL/SQL

Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM / vi

vi Oracle Database 12c PL/SQL Programming

C SQL Built-in Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893

D PL/SQL Built-in Packages and Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 965

E Regular Expression Primer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999

F Wrapping PL/SQL Code Primer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1019

G PL/SQL Hierarchical Profiler Primer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029

H PL/SQL Reserved Words and Keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1045

I Mastery Check Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055

Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1085

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1101

00-FM.indd 6 12/17/13 12:11 PM

Page 3: Contents at a Glance - mhp-assets.s3.amazonaws.com · Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM / vi vi Oracle Database 12c PL/SQL

Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM / vii

Contents

Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xixIntroduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi

PART IOracle PL/SQL

1 Oracle PL/SQL Development Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3PL/SQL’s History and Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4Oracle Development Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

The Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7The PL/SQL Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9The Oracle Processing Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12Two-Tier Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13N-Tier Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15Mastery Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2 New Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17New SQL Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

Data Catalog DIRECTORY Qualifies a LIBRARY Object . . . . . . . . . . . . . . . . . . 19Define Tables with Valid-Time (VT) Support . . . . . . . . . . . . . . . . . . . . . . . . . . . 19Enhanced Oracle Native LEFT OUTER JOIN Syntax . . . . . . . . . . . . . . . . . . . . . 20Default Values for Columns Based on Sequences . . . . . . . . . . . . . . . . . . . . . . . 20Default Values for Explicit Null Insertion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22Identity Columns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23Increased Size Limits of String and Raw Types . . . . . . . . . . . . . . . . . . . . . . . . . 24Pass Results from SQL Statements to External Programs . . . . . . . . . . . . . . . . . . 24Native SQL Support for Query Row Limits and Offsets . . . . . . . . . . . . . . . . . . . 26Oracle Database Driver for MySQL Applications . . . . . . . . . . . . . . . . . . . . . . . 29SQL CROSS APPLY, OUTER APPLY, and LATERAL . . . . . . . . . . . . . . . . . . . . . . 29Bequeath CURRENT_USER Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

vii

00-FM.indd 7 12/17/13 12:11 PM

Page 4: Contents at a Glance - mhp-assets.s3.amazonaws.com · Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM / vi vi Oracle Database 12c PL/SQL

Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM / viii

viii Oracle Database 12c PL/SQL Programming

New PL/SQL Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32Caching of Invoker Rights Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32Ability to White List PL/SQL Program Unit Callers . . . . . . . . . . . . . . . . . . . . . . 32Native Client API Support for PL/SQL Types . . . . . . . . . . . . . . . . . . . . . . . . . . . 34New PL/SQL Package UTL_CALL_STACK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34DBMS_UTILITY Adds EXPAND_SQL_TEXT Subprogram . . . . . . . . . . . . . . . . . . 34DBMS_SQL Adds a New Formal Schema

to the PARSE Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35PL/SQL Functions in SQL WITH Clause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35PL/SQL-Specific Data Types Allowed in SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . 37Implicit REF CURSOR Parameter Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

Supporting Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41Mastery Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

3 PL/SQL Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43Block Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

Execution Block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44Basic Block Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45Declaration Block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48Exception Block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

Behavior of Variables in Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50Anonymous Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50Nested Anonymous Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55Local Named Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57Stored Named Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

Basic Scalar and Composite Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63Scalar Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63Attribute and Table Anchoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65Composite Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

Control Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81Conditional Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81Iterative Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92User-Defined Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93Dynamic User-Defined Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

Bulk Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95Functions, Procedures, and Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

Transaction Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106Single Transaction Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106Multiple Transaction Scopes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

00-FM.indd 8 12/17/13 12:11 PM

Page 5: Contents at a Glance - mhp-assets.s3.amazonaws.com · Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM / vi vi Oracle Database 12c PL/SQL

Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM /

Contents ix

Database Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109Mastery Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

4 Language Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111Lexical Units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

Delimiters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112Identifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

Variables and Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122Variable Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123Scalar Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126Large Objects (LOBs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142Composite Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144System Reference Cursors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150Mastery Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

5 Control Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153Conditional Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

IF Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162CASE Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166Conditional Compilation Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

Iterative Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172Simple Loop Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172FOR Loop Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179WHILE Loop Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

Cursor Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185Implicit Cursors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185Explicit Cursors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

Bulk Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203BULK COLLECT INTO Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203FORALL Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

Supporting Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214Mastery Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

6 Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217Introduction to Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218Object Types: Varray and Table Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

Varray Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221Table Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225

Associative Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240Defining and Using Associative Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241

00-FM.indd 9 12/17/13 12:11 PM

Page 6: Contents at a Glance - mhp-assets.s3.amazonaws.com · Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM / vi vi Oracle Database 12c PL/SQL

Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM / x

x Oracle Database 12c PL/SQL Programming

Oracle Collection API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247COUNT Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250DELETE Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251EXISTS Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252EXTEND Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253FIRST Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254LAST Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255LIMIT Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255NEXT Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256PRIOR Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256TRIM Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257

Supporting Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259Mastery Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259

7 Error Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261Exception Types and Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262

Compilation Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263Runtime Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266

Exception Management Built-in Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274User-Defined Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

Declaring User-Defined Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276Dynamic User-Defined Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

Exception Stack Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281Supporting Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287Mastery Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288

PART IIPL/SQL Programming

8 Functions and Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293Function and Procedure Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295Transaction Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

Calling Subroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303Positional Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304Named Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304Mixed Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304Exclusionary Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304SQL Call Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305

Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306Function Model Choices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307Creation Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308Pass-by-Value Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322Pass-by-Reference Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336

00-FM.indd 10 12/17/13 12:11 PM

Page 7: Contents at a Glance - mhp-assets.s3.amazonaws.com · Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM / vi vi Oracle Database 12c PL/SQL

Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM /

Contents xi

Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338Pass-by-Value Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339Pass-by-Reference Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342

Supporting Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345Mastery Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345

9 Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347Package Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348Package Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354

Prototype Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355Serially Reusable Precompiler Directive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361Components: Functions and Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364

Package Body . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365Prototype Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371Components: Functions and Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371

Definer vs. Invoker Rights Mechanics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375Managing Packages in the Database Catalog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378

Finding, Validating, and Describing Packages . . . . . . . . . . . . . . . . . . . . . . . . . . 379Checking Dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380Comparing Validation Methods: Timestamp vs. Signature . . . . . . . . . . . . . . . . . 381

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382Mastery Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382

10 Large Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385Working with Internally Stored LOB Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387

LOB Assignments Under 32K . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387LOB Assignments over 32K . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389

Reading Files into Internally Stored Columns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398Reading Local Files into CLOB or NCLOB Columns . . . . . . . . . . . . . . . . . . . . . 399Reading Local Files into BLOB Columns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402Working with LOBs Through Web Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404

Working with Binary Files (BFILEs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413Creating and Using Virtual Directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413Reading Canonical Path Names and Filenames . . . . . . . . . . . . . . . . . . . . . . . . . 419

Understanding the DBMS_LOB Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427Package Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427Package Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428Opening and Closing Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429Manipulation Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430Introspection Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436

00-FM.indd 11 12/17/13 12:11 PM

Page 8: Contents at a Glance - mhp-assets.s3.amazonaws.com · Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM / vi vi Oracle Database 12c PL/SQL

Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM / xii

xii Oracle Database 12c PL/SQL Programming

BFILE Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440Temporary LOB Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441Security Link Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442

Supporting Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446The LONG to CLOB Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446Manage LOBs from the File System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446Manage CLOB and BLOB LOBs Through the Web . . . . . . . . . . . . . . . . . . . . . . 446Manage BFILE LOBs Through the Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446Mastery Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447

11 Object Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449Object Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453

Declaring Objects Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453Implementing Object Bodies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456White Listing Object Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461Getters and Setters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463Static Member Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465Comparing Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467

Inheritance and Polymorphism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475Declaring Subclasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477Implementing Subclasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478Type Evolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481

Implementing Object Type Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483Declaring Object Type Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483Implementing Object Type Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483

Supporting Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487Mastery Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488

12 Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491Introduction to Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492Database Trigger Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495Data Definition Language Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499

Event Attribute Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501Building DDL Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512

Data Manipulation Language Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515Statement-Level Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516Row-Level Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518

Compound Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527INSTEAD OF Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532System and Database Event Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536Trigger Restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538

Maximum Trigger Size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538SQL Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538LONG and LONG RAW Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539

00-FM.indd 12 12/17/13 12:11 PM

Page 9: Contents at a Glance - mhp-assets.s3.amazonaws.com · Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM / vi vi Oracle Database 12c PL/SQL

Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM /

Contents xiii

Mutating Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539System Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540

Supporting Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541Mastery Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541

13 Dynamic SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545Dynamic SQL Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547Native Dynamic SQL (NDS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547

Dynamic Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548Dynamic Statements with Inputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550Dynamic Statements with Inputs and Outputs . . . . . . . . . . . . . . . . . . . . . . . . . 554Dynamic Statements with an Unknown Number of Inputs . . . . . . . . . . . . . . . . 558

DBMS_SQL Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560Dynamic Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561Dynamic Statements with Input Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564Dynamic Statements with Variable Inputs and Fixed Outputs . . . . . . . . . . . . . . 566Dynamic Statements with Variable Inputs and Outputs . . . . . . . . . . . . . . . . . . . 571DBMS_SQL Package Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576

Supporting Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591Mastery Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591

PART IIIAppendixes and Glossary

A Oracle Database Primer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595Oracle Database Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596Starting and Stopping the

Oracle Database 12c Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603Unix or Linux Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604Microsoft Windows Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609

Starting and Stopping the Oracle Listener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610Multiversion Concurrency Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615

Data Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616DML Locking and Isolation Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619

Definer Rights and Invoker Rights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620Definer Rights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620Invoker Rights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621

SQL Interactive and Batch Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622SQL*Plus Command-Line Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622Oracle SQL Developer Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644

Database Administration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652Provisioning Users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652Using Database Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661

00-FM.indd 13 12/17/13 12:11 PM

Page 10: Contents at a Glance - mhp-assets.s3.amazonaws.com · Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM / vi vi Oracle Database 12c PL/SQL

Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM / xiv

xiv Oracle Database 12c PL/SQL Programming

Security Hardening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670Data Governance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681

SQL Tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684EXPLAIN PLAN Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685DBMS_XPLAN Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686

SQL Tracing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690Tracing Session Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691Convert Raw Trace Files to Readable Trace Files . . . . . . . . . . . . . . . . . . . . . . . . 693

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694

B SQL Primer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695Oracle SQL Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699Data Definition Language (DDL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703

CREATE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704ALTER Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773RENAME Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 791DROP Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792TRUNCATE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794COMMENT Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795

Data Manipulation Language (DML) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795ACID Compliant Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795INSERT Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 799UPDATE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815DELETE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829MERGE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 834

Transaction Control Language (TCL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 841Queries: SELECT Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843

Queries that Return Columns or Results from Columns . . . . . . . . . . . . . . . . . . . 845Queries that Aggregate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 861Queries that Return Columns or Results Selectively . . . . . . . . . . . . . . . . . . . . . 866

Join Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876Joins that Splice Together Rows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878Joins that Splice Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 891

C SQL Built-in Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893Character Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894

ASCII Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894ASCIISTR Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895CHR Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895CONCAT Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896INITCAP Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896INSTR Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 897LENGTH Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 897LOWER Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 898

00-FM.indd 14 12/17/13 12:11 PM

Page 11: Contents at a Glance - mhp-assets.s3.amazonaws.com · Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM / vi vi Oracle Database 12c PL/SQL

Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM /

Contents xv

LPAD Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 898LTRIM Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 899REPLACE Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 899REVERSE Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900RPAD Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900RTRIM Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901UPPER Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901

Data Type Conversion Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 902CAST Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 902CONVERT Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904TO_CHAR Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905TO_CLOB Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907TO_DATE Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907TO_LOB Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908TO_NCHAR Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910TO_NCLOB Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910TO_NUMBER Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910

Date-time Conversion Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 911ADD_MONTHS Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 911CURRENT_DATE Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 911CURRENT_TIMESTAMP Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 912DBTIMEZONE Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 912EXTRACT Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 912FROM_TZ Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913LAST_DAY Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913LOCALTIMESTAMP Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914MONTHS_BETWEEN Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914NEW_TIME Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915ROUND Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916SYSDATE Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916SYSTIMESTAMP Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 917TO_CHAR(date) Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 917TO_DSINTERVAL Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918TO_TIMESTAMP Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918TO_TIMESTAMP_TZ Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919TO_YMINTERVAL Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919TRUNC(date) Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 920TZ_OFFSET Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 920

Collection Management Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 921CARDINALITY Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 921COLLECT Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 921POWERMULTISET Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925POWERMULTISET_BY_CARDINALITY Function . . . . . . . . . . . . . . . . . . . . . . . . 926SET Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926

00-FM.indd 15 12/17/13 12:11 PM

Page 12: Contents at a Glance - mhp-assets.s3.amazonaws.com · Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM / vi vi Oracle Database 12c PL/SQL

Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM / xvi

xvi Oracle Database 12c PL/SQL Programming

Collection Set Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926CARDINALITY Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 928EMPTY Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 929MULTISET Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 929MULTISET EXCEPT Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930MULTISET INTERSECT Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930MULTISET UNION Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 931SET Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 932SUBMULTISET OF Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933

Number Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933CEIL Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933FLOOR Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934MOD Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934POWER Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 936REMAINDER Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937ROUND Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 938

Error Reporting Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 938SQLCODE Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 938SQLERRM Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939

Miscellaneous Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940BFILENAME Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 941COALESCE Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 943DECODE Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 944DUMP Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945EMPTY_BLOB Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945EMPTY_CLOB Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948GREATEST Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 949LEAST Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 951NANVL Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953NULLIF Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953NVL Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954SYS_CONTEXT Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954TABLE Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 958TREAT Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 960USERENV Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 961VSIZE Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 963

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 963

D PL/SQL Built-in Packages and Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 965Oracle Database 11g and 12c New Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 966Examples of Package Use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974

DBMS_APPLICATION_INFO Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974DBMS_COMPARISON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 979DBMS_CRYPTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986DBMS_FGA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 990Case Study: Query Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 991

00-FM.indd 16 12/17/13 12:11 PM

Page 13: Contents at a Glance - mhp-assets.s3.amazonaws.com · Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM / vi vi Oracle Database 12c PL/SQL

Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM /

Contents xvii

Supporting Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997

E Regular Expression Primer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999Regular Expression Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000

Character Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000Collation Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1003Metacharacters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004Metasequences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1007

Regular Expression Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1007REGEXP_COUNT Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1007REGEXP_INSTR Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011REGEXP_LIKE Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1013REGEXP_REPLACE Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1014REGEXP_SUBSTR Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1015

Supporting Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1017Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1017

F Wrapping PL/SQL Code Primer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1019Limitations of Wrapping PL/SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1020

Limitations of the PL/SQL wrap Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1021Limitations of the DBMS_DDL.WRAP Function . . . . . . . . . . . . . . . . . . . . . . . 1021

Using the wrap Command-Line Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1021Using the DBMS_DDL Command-Line Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1021

WRAP Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1022CREATE_WRAPPED Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1026

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1028

G PL/SQL Hierarchical Profiler Primer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029Configuring the Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1030Collecting Profiler Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1032Understanding Profiler Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1035

Reading the Raw Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1035Defining the PL/SQL Profiler Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1037Querying the Analyzed Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1039

Using the plshprof Command-Line Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1040Supporting Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1043Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1043

H PL/SQL Reserved Words and Keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1045Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1053

I Mastery Check Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055Chapter 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1056Chapter 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1058Chapter 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1060

00-FM.indd 17 12/17/13 12:11 PM

Page 14: Contents at a Glance - mhp-assets.s3.amazonaws.com · Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM / vi vi Oracle Database 12c PL/SQL

Oracle TIGHT / Oracle Database 12c PL/SQL Programming / Michael McLaughlin / 181243-1 / FM / xviii

xviii Oracle Database 12c PL/SQL Programming

Chapter 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1063Chapter 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1065Chapter 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1067Chapter 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1069Chapter 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1071Chapter 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1074Chapter 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1076Chapter 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1078Chapter 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1080Chapter 13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1082

Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1085

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1101

00-FM.indd 18 12/17/13 12:11 PM