1.4.1 SQL Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.4.2 INSERT and UPDATE Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
1.5 PL/SQL Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
1.5.1 PL/SQL Stored Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
1.5.2 PL/SQL Stored Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
1.5.3 Anonymous PL/SQL Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
1.5.4 Using DBMS_OUTPUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
1.5.5 Implicit results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
1.5.6 Edition-Based Redefinition (EBR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
1.6 Using Bind Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
1.6.1 Binding By Name or Position . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
1.6.2 Bind Direction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
1.6.3 Binding Null Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
1.6.4 Binding ROWID Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
1.6.5 DML RETURNING Bind Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
1.6.6 LOB Bind Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
1.6.7 REF CURSOR Bind Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
1.6.8 Binding PL/SQL Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
1.6.9 Binding PL/SQL Records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
1.6.10 Binding Spatial Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
1.6.11 Changing Bind Data Types using an Input Type Handler . . . . . . . . . . . . . . . . . . . 58
1.6.12 Binding Multiple Values to a SQL WHERE IN Clause . . . . . . . . . . . . . . . . . . . . 59
1.6.13 Binding Column and Table Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
1.7 Using CLOB and BLOB Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
1.7.1 Simple Insertion of LOBs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
1.7.2 Fetching LOBs as Strings and Bytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
1.7.3 Streaming LOBs (Read) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
1.7.4 Streaming LOBs (Write) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
1.7.5 Temporary LOBs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
1.8 Working with the JSON Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
1.9 Simple Oracle Document Access (SODA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
1.9.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
1.9.2 SODA Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
1.10 Working with XMLTYPE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
1.11 Batch Statement Execution and Bulk Loading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
1.11.1 Batch Execution of SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
1.11.2 Batch Execution of PL/SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
1.11.3 Handling Data Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
1.11.4 Identifying Affected Rows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
1.11.5 DML RETURNING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
1.11.6 Predefining Memory Areas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
1.11.7 Loading CSV Files into Oracle Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
1.12 Exception Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
1.13 Oracle Advanced Queuing (AQ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
1.13.1 Creating a Queue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
1.13.2 Enqueuing Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
1.13.3 Dequeuing Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
1.13.4 Using Object Queues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
1.13.5 Changing Queue and Message Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
1.13.6 Bulk Enqueue and Dequeue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
1.14 Continuous Query Notification (CQN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
1.14.1 Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
1.14.2 Creating a Subscription . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
1.14.3 Registering Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
ii