Introduction |
|
xiii | |
|
Part I Introductory Concepts |
|
|
1 | (50) |
|
|
3 | (10) |
|
|
4 | (1) |
|
|
5 | (1) |
|
|
5 | (2) |
|
Data Structure Management |
|
|
6 | (1) |
|
|
6 | (1) |
|
|
6 | (1) |
|
|
6 | (1) |
|
|
7 | (1) |
|
Using PL/SQL in the Real World |
|
|
7 | (4) |
|
|
11 | (2) |
|
|
13 | (16) |
|
|
14 | (4) |
|
|
18 | (3) |
|
|
19 | (2) |
|
|
21 | (4) |
|
|
22 | (2) |
|
Meta Data for PL/SQL Code |
|
|
24 | (1) |
|
|
25 | (1) |
|
|
26 | (2) |
|
|
26 | (1) |
|
|
26 | (2) |
|
|
28 | (1) |
|
|
29 | (22) |
|
|
29 | (1) |
|
New Features in Oracle 11g |
|
|
30 | (5) |
|
New PLW-06009 Warning When a When Others Clause Does Not Have a Raise or Raise_Application_Error |
|
|
30 | (1) |
|
Fine-Grained Dependency Tracking |
|
|
31 | (1) |
|
|
31 | (1) |
|
PL/SQL Triggers Enhancements |
|
|
31 | (1) |
|
PL/SQL Intra-Unit Inlining (Efficiency) |
|
|
32 | (1) |
|
SQL and PL/SQL Result Caching (Efficiency) |
|
|
33 | (1) |
|
Enhanced Native Compilation |
|
|
34 | (1) |
|
Other Miscellaneous Enhancements |
|
|
34 | (1) |
|
New Features in Oracle 10g |
|
|
35 | (14) |
|
An Enhanced DBMS_OUTPUT Package (Oracle 10gR2) |
|
|
35 | (1) |
|
Tracking the Error Line Number |
|
|
35 | (3) |
|
|
38 | (1) |
|
Programmer-Defined Quote Delimiter for String Literals |
|
|
39 | (1) |
|
Enhanced FORALL Statement for Handling DML Array Processing with Sparse Collections |
|
|
40 | (5) |
|
Conditional Compilation (Oracle 10gR2) |
|
|
45 | (2) |
|
Nested Table Enhancements |
|
|
47 | (1) |
|
|
47 | (1) |
|
Enhanced Email Facility from PL/SQL |
|
|
48 | (1) |
|
New PL/SQL API for Linear Matrix Math (Oracle 10gR2) |
|
|
49 | (1) |
|
|
49 | (2) |
|
Part II Techniques for PL/SQL Programming |
|
|
51 | (142) |
|
Data Structure Management in PL/SQL |
|
|
53 | (38) |
|
Techniques for Using Records |
|
|
54 | (6) |
|
|
54 | (2) |
|
Using Functions to Perform Record Comparison |
|
|
56 | (4) |
|
Techniques for Using Associative Arrays |
|
|
60 | (12) |
|
|
61 | (6) |
|
|
67 | (5) |
|
Techniques for Using Nested Tables |
|
|
72 | (11) |
|
Passing Resultsets Between PL/SQL Programs |
|
|
72 | (5) |
|
Manipulating Stored Nested Tables Using SQL |
|
|
77 | (6) |
|
Simulating Multi-Dimensional Arrays |
|
|
83 | (6) |
|
|
89 | (1) |
|
|
90 | (1) |
|
Error Management in PL/SQL |
|
|
91 | (18) |
|
Techniques for Obtaining Complete Error Information |
|
|
93 | (7) |
|
Tracking the Error Line Number |
|
|
98 | (2) |
|
Techniques for Customizing the Error Info Returned |
|
|
100 | (8) |
|
Techniques for Halting Further Processing on Error Occurrences |
|
|
101 | (3) |
|
Throwing, Trapping, and Handling Customized Errors |
|
|
104 | (4) |
|
|
108 | (1) |
|
Data Management in PL/SQL |
|
|
109 | (34) |
|
Data-Retrieval Techniques |
|
|
110 | (2) |
|
Data-Manipulation Techniques |
|
|
112 | (1) |
|
Array Processing in PL/SQL |
|
|
113 | (29) |
|
Array Processing Using Static SQL |
|
|
114 | (3) |
|
|
117 | (15) |
|
Bulk DML with Sparse Collections |
|
|
132 | (5) |
|
Techniques for Bulk Querying |
|
|
137 | (4) |
|
Array Processing Using Dynamic SQL |
|
|
141 | (1) |
|
|
142 | (1) |
|
Application Management in PL/SQL |
|
|
143 | (26) |
|
Procedures versus Functions |
|
|
144 | (2) |
|
|
144 | (1) |
|
Creating a Function-Based Index |
|
|
145 | (1) |
|
Creating a Table Function |
|
|
146 | (1) |
|
Using User-Defined Operators and Functions |
|
|
146 | (1) |
|
Coding Packages to Globalize Data and Code |
|
|
147 | (2) |
|
Packages versus Contexts and Globalizing Data |
|
|
149 | (1) |
|
Coding Packages to Localize Data and Privatize Code |
|
|
150 | (1) |
|
Coding Packages to Break the Dependency Chain |
|
|
150 | (7) |
|
Reading and Writing Package Variables Dynamically |
|
|
157 | (3) |
|
Coding Packages to Pass Data Between Applications |
|
|
160 | (4) |
|
|
161 | (1) |
|
|
161 | (3) |
|
Packages versus Objects as Application Structures |
|
|
164 | (1) |
|
Supplementing Data Integrity Using Triggers |
|
|
165 | (2) |
|
|
167 | (2) |
|
Transaction Management in PL/SQL |
|
|
169 | (24) |
|
|
170 | (1) |
|
Autonomous Transaction Techniques |
|
|
171 | (6) |
|
Using Autonomous Transactions for Error Logging |
|
|
172 | (4) |
|
Using COMMIT Inside a Database Trigger |
|
|
176 | (1) |
|
Techniques for Auditing Queries |
|
|
177 | (15) |
|
|
192 | (1) |
|
Part III Applying PL/SQL in the Real World |
|
|
193 | (116) |
|
Application Development Frameworks Using PL/SQL |
|
|
195 | (36) |
|
|
196 | (9) |
|
|
203 | (2) |
|
|
205 | (12) |
|
|
214 | (3) |
|
|
217 | (6) |
|
Techniques for Performing ETL Using PL/SQL |
|
|
217 | (5) |
|
Case Study--Replacing Staging Tables Using Transformation Pipeline Chain |
|
|
222 | (1) |
|
Performance Tuning Framework |
|
|
223 | (6) |
|
Framework for Monitoring and Tuning SQL |
|
|
224 | (3) |
|
Framework for Monitoring and Tuning PL/SQL |
|
|
227 | (2) |
|
|
229 | (2) |
|
Applying PL/SQL in 3GL and Web Environments |
|
|
231 | (22) |
|
Extending PL/SQL to Use Java |
|
|
232 | (10) |
|
Loading the Java Class (Source or Binary) |
|
|
233 | (1) |
|
Publishing the Java Method |
|
|
234 | (2) |
|
Calling the Java Method via Its Call Spec |
|
|
236 | (1) |
|
Using External Java Methods to Pass Data Between Applications |
|
|
237 | (3) |
|
Auto-Generating Call Specs Using loadjava |
|
|
240 | (2) |
|
Extending PL/SQL to Use HTML |
|
|
242 | (3) |
|
HTML in PL/SQL versus PL/SQL in HTML |
|
|
245 | (1) |
|
Emailing Techniques in PL/SQL |
|
|
246 | (5) |
|
Emailing from PL/SQL with Large Binary Attachments |
|
|
246 | (5) |
|
Using UTL_MAIL versus UTL_SMTP |
|
|
251 | (1) |
|
|
252 | (1) |
|
|
253 | (30) |
|
Simulating a Dataset Stage Using Pipelined Table Functions |
|
|
254 | (9) |
|
|
256 | (1) |
|
|
256 | (4) |
|
|
260 | (1) |
|
Replacing Staging Tables Using a Transformation Pipeline Chain |
|
|
261 | (2) |
|
Auto-Generating Code Using Dynamic SQL and/or PL/SQL |
|
|
263 | (6) |
|
Auto-Generating Static PL/SQL Code |
|
|
265 | (1) |
|
Auto-Generating Dynamic PL/SQL Code |
|
|
266 | (3) |
|
Hiding Statically Written and Dynamically Generated PL/SQL Code |
|
|
269 | (13) |
|
Wrapping the PL/SQL Source File to a PL/SQL Binary File |
|
|
269 | (6) |
|
Obfuscating Dynamically Generated PL/SQL Source Code |
|
|
275 | (3) |
|
Using the WRAP Utility in Conjunction with DBMS_DDL.CREATE_WRAPPED |
|
|
278 | (4) |
|
|
282 | (1) |
|
PL/SQL Tuning and Debugging |
|
|
283 | (14) |
|
|
284 | (2) |
|
|
286 | (6) |
|
|
287 | (1) |
|
|
288 | (1) |
|
Use of Dynamic SQL and PL/SQL |
|
|
289 | (1) |
|
Coding of Procedures and Functions and Their Modularization (and Encapsulation) into a Package |
|
|
290 | (1) |
|
Invoker and Definer Rights |
|
|
291 | (1) |
|
Efficient Transaction Management |
|
|
292 | (1) |
|
Techniques for Debugging PL/SQL |
|
|
292 | (4) |
|
Putting a Robust Error-Handling Mechanism in Place |
|
|
293 | (1) |
|
Introducing Debug Messages as Part of the Code Asynchronously |
|
|
294 | (2) |
|
Monitoring the Code to Get the Execution Profile |
|
|
296 | (1) |
|
|
296 | (1) |
|
|
297 | (12) |
|
Data Structure Management |
|
|
298 | (2) |
|
|
300 | (1) |
|
|
301 | (3) |
|
|
304 | (2) |
|
|
306 | (1) |
|
Using PL/SQL in 3GL and the Web |
|
|
306 | (1) |
|
|
307 | (2) |
Index |
|
309 | |