Oracle® SQL by Example, Fourth Edition
by Alice Rischert
Beginning PL/SQL: From Novice to Professional
by Donald J. Bales
Oracle PL/SQL Programming, 5th Edition
by Steven Feuerstein; Bill Pribyl
Head First PHP & MySQL
by Lynn Beighley; Michael Morrison
Learning SQL, 2nd Edition
by Alan Beaulieu
Head First SQL
by Lynn Beighley
This is the Safari online edition of the printed book.
This integrated learning solution teaches all the Oracle PL/SQL skills you need, hands-on, through real-world labs, extensive examples, exercises, and projects! Completely updated for Oracle 11g, Oracle PL/SQL by Example, Fourth Edition covers all the fundamentals, from PL/SQL syntax and program control through packages and Oracle 11g’s significantly improved triggers.
One step at a time, you’ll walk through every key task, discovering the most important PL/SQL programming techniques on your own. Building on your hands-on learning, the authors share solutions that offer deeper insights and proven best practices. End-of-chapter projects bring together all the techniques you’ve learned, strengthening your understanding through real-world practice.
This book’s approach fully reflects the authors’ award-winning experience teaching PL/SQL programming to professionals at Columbia University. New database developers and DBAs can use its step-by-step instructions to get productive fast; experienced PL/SQL programmers can use this book as a practical solutions reference. Coverage includes
• Mastering basic PL/SQL concepts and general programming language fundamentals, and understanding SQL’s role in
PL/SQL
• Using conditional and iterative program control techniques, including the new CONTINUE and CONTINUE WHEN statements
• Efficiently handling errors and exceptions
• Working with cursors and triggers, including Oracle 11g’s powerful new compound triggers
• Using stored procedures, functions, and packages to write modular code that other programs can execute
• Working with collections, object-relational features, native dynamic SQL, bulk SQL, and other advanced PL/SQL capabilities
• Handy reference appendices: PL/SQL formatting guide, sample database schema, ANSI SQL standards reference, and
more
Benjamin Rosenzweig is a Software Development Manager at Misys. Previously he was a Principal Consultant at Oracle. His experience ranges from creating an electronic Tibetan—English Dictionary in Kathmandu, Nepal, to supporting presentation centers at Goldman Sachs and managing trading systems at TIAA-CREF. As an instructor at Columbia University’s Computer Technology and Application Program, he was awarded the Outstanding Teaching Award. Rosenzweig wrote and presented Oracle Forms Developer: The Complete Video Course, and coauthored Oracle Web Application Programming for PL/SQL Developers.
Elena Silvestrova Rakhimov is Senior Developer and Team Lead at Alea Software. She has more than fifteen years of experience in database development in a wide spectrum of enterprise and business environments, ranging from non-profit organizations to Wall Street. She has taught database programming at Columbia University.
Contents
Acknowledgments xiv
About the Authors xv
Introduction xvii
CHAPTER 1 PL/SQL Concepts 1
LAB 1.1 PL/SQL in Client/Server Architecture 2
1.1.1 Use PL/SQL Anonymous Blocks 8
1.1.2 Understand How PL/SQL Gets Executed 10
LAB 1.2 PL/SQL in SQL*Plus 12
1.2.1 Use Substitution Variables 16
1.2.2 Use the DBMS_OUTPUT.PUT_LINE Statement 17
Chapter 1 Try It Yourself 19
CHAPTER 2 General Programming Language
Fundamentals 21
LAB 2.1 PL/SQL Programming Fundamentals 22
2.1.1 Make Use of PL/SQL Language Components 23
2.1.2 Make Use of PL/SQL Variables 24
2.1.3 Handle PL/SQL Reserved Words 26
2.1.4 Make Use of Identifiers in PL/SQL 27
2.1.5 Make Use of Anchored Datatypes 28
2.1.6 Declare and Initialize Variables 31
2.1.7 Understand the Scope of a Block, Nested Blocks, and Labels 34
Chapter 2 Try It Yourself 37
CHAPTER 3 SQL in PL/SQL 39
LAB 3.1 Making Use of DML in PL/SQL 40
3.1.1 Use the Select INTO Syntax for Variable Initialization 41
3.1.2 Use DML in a PL/SQL Block 42
3.1.3 Make Use of a Sequence in a PL/SQL Block 44
LAB 3.2 Making Use of SAVEPOINT 45
3.2.1 Make Use of COMMIT, ROLLBACK, and SAVEPOINT in a PL/SQL Block 48
Chapter 3 Try It Yourself 51
CHAPTER 4 Conditional Control: IF Statements 53
LAB 4.1 IF Statements 54
4.1.1 Use the IF-THEN Statement 58
4.1.2 Use the IF-THEN-ELSE Statement 62
LAB 4.2 ELSIF Statements 65
4.2.1 Use the ELSIF Statement 69
LAB 4.3 Nested IF Statements 74
4.3.1 Use Nested IF Statements 76
Chapter 4 Try It Yourself 80
CHAPTER 5 Conditional Control: CASE Statements 81
LAB 5.1 CASE Statements 82
5.1.1 Use the CASE Statement 89
5.1.2 Use the Searched CASE Statement 91
LAB 5.2 CASE Expressions 96
5.2.1 Use the CASE Expression 100
LAB 5.3 NULLIF and COALESCE Functions 103
5.3.1 The NULLIF Function 107
5.3.2 Use the COALESCE Function 109
Chapter 5 Try It Yourself 112
CHAPTER 6 Iterative Control: Part I 113
LAB 6.1 Simple Loops 114
6.1.1 Use Simple Loops with EXIT Conditions 118
6.1.2 Use Simple Loops with EXIT WHEN Conditions 120
LAB 6.2 WHILE Loops 124
6.2.1 Use WHILE Loops 128
LAB 6.3 Numeric FOR Loops 132
6.3.1 Use Numeric FOR Loops with the IN Option 137
6.3.2 Use Numeric FOR Loops with the REVERSE Option 139
Chapter 6 Try It Yourself 142
CHAPTER 7 Iterative Control: Part II 143
LAB 7.1 The CONTINUE Statement 144
7.1.1 Use the CONTINUE Statement 146
7.1.2 Use the CONTINUE WHEN Condition 152
LAB 7.2 Nested Loops 154
7.2.1 Use Nested Loops 157
Chapter 7 Try It Yourself 161
CHAPTER 8 Error Handling and Built-in Exceptions 163
LAB 8.1 Handling Errors 164
8.1.1 Understand the Importance of Error Handling 167
LAB 8.2 Built-in Exceptions 169
8.2.1 Use Built-in Exceptions 174
Chapter 8 Try It Yourself 178
CHAPTER 9 Exceptions 179
LAB 9.1 Exception Scope 180
9.1.1 Understand the Scope of an Exception 183
LAB 9.2 User-Defined Exceptions 188
9.2.1 Use User-Defined Exceptions 193
LAB 9.3 Exception Propagation 197
9.3.1 Understand How Exceptions Propagate 203
9.3.2 Reraise Exceptions 206
Chapter 9 Try It Yourself 209
CHAPTER 10 Exceptions: Advanced Concepts 211
LAB 10.1 RAISE_APPLICATION_ERROR 212
10.1.1 Use RAISE_APPLICATION_ERROR 215
LAB 10.2 EXCEPTION_INIT Pragma 217
10.2.1 USE the EXCEPTION_INIT Pragma 219
LAB 10.3 SQLCODE and SQLERRM 222
10.3.1 Use SQLCODE and SQLERRM 225
Chapter 10 Try It Yourself 227
CHAPTER 11 Introduction to Cursors 229
LAB 11.1 Cursor Manipulation 230
11.1.1 Make Use of Record Types 234
11.1.2 Process an Explicit Cursor 235
11.1.3 Make Use of Cursor Attributes 240
11.1.4 Put It All Together 242
LAB 11.2 Using Cursor FOR Loops and Nested Cursors 246
11.2.1 Use a Cursor FOR Loop 247
11.2.2 Process Nested Cursors 247
Chapter 11 Try It Yourself 252
CHAPTER 12 Advanced Cursors 253
LAB 12.1 Using Parameters with Cursors and Complex Nested Cursors 254
12.1.1 Use Parameters in a Cursor 255
12.1.2 Use Complex Nested Cursors 255
LAB 12.2 FOR UPDATE and WHERE CURRENT Cursors 258
12.2.1 For UPDATE and WHERE CURRENT Cursors 258
CHAPTER 13 Triggers 263
LAB 13.1 What Triggers Are 264
13.1.1 Understand What a Trigger Is 272
13.1.2 Use BEFORE and AFTER Triggers 274
LAB 13.2 Types of Triggers 277
13.2.1 Use Row and Statement Triggers 283
13.2.2 Use INSTEAD OF Triggers 285
Chaper 13 Try It Yourself 290
CHAPTER 14 Compound Triggers 291
LAB 14.1 Mutating Table Issues 292
14.1.1 Understand Mutating Tables 296
LAB 14.2 Compound Triggers 300
14.2.1 Understand Compound Triggers 306
Chapter 14 Try It Yourself 313
CHAPTER 15 Collections 315
LAB 15.1 PL/SQL Tables 316
15.1.1 Use Associative Arrays 326
15.1.2 Use Nested Tables 330
LAB 15.2 Varrays 334
15.2.1 Use Varrays 338
LAB 15.3 Multilevel Collections 342
15.3.1 Use Multilevel Collections 344
Chapter 15 Try It Yourself 348
CHAPTER 16 Records 349
LAB 16.1 Record Types 350
16.1.1 Use Table-Based and Cursor-Based Records 358
16.1.2 Use User-Defined Records 362
LAB 16.2 Nested Records 367
16.2.1 Use Nested Records 369
LAB 16.3 Collections of Records 373
16.3.1 Use Collections of Records 374
Chapter 16 Try It Yourself 378
CHAPTER 17 Native Dynamic SQL 379
LAB 17.1 EXECUTE IMMEDIATE Statements 380
17.1.1 Use the EXECUTE IMMEDIATE Statement 387
LAB 17.2 OPEN-FOR, FETCH, and CLOSE Statements 392
17.2.1 Use OPEN-FOR, FETCH, and CLOSE Statements 395
Chapter 17 Try It Yourself 401
CHAPTER 18 Bulk SQL 403
LAB 18.1 The FORALL Statement 404
18.1.1 Use the FORALL Statement 413
LAB 18.2 The BULK COLLECT Clause 422
18.2.1 Use the BULK COLLECT Statement 428
Chapter 18 Try It Yourself 437
CHAPTER 19 Procedures 439
LAB 19.1 Creating Procedures 441
19.1.1 Create Procedures 441
19.1.2 Query the Data Dictionary for Information on Procedures 443
LAB 19.2 Passing Parameters into and out of Procedures 444
19.2.1 Use IN and OUT Parameters with Procedures 445
Chapter 19 Try It Yourself 447
Part 1 447
Part 2 447
CHAPTER 20 Functions 449
LAB 20.1 Creating and Using Functions 450
20.1.1 Create Stored Functions 451
20.1.2 Make Use of Functions 452
20.1.3 Invoke Functions in SQL Statements 453
20.1.4 Write Complex Functions 454
Chapter 20 Try It Yourself 455
CHAPTER 21 Packages 457
LAB 21.1 The Benefits of Using Packages 458
21.1.1 Create Package Specifications 460
21.1.2 Create Package Bodies 462
21.1.3 Call Stored Packages 464
21.1.4 Create Private Objects 465
21.1.5 Create Package Variables and Cursors 469
LAB 21.2 Cursor Variables 471
21.2.1 Make Use of Cursor Variables 475
LAB 21.3 Extending the Package 480
21.3.1 Extend the Package 480
Chapter 21 Try It Yourself 493
CHAPTER 22 Stored Code 495
LAB 22.1 Gathering Information About Stored Code 496
22.1.1 Get Stored Code Information from the Data Dictionary 496
22.1.2 Enforce the Purity Level with the RESTRICT_REFERENCES Pragma 500
22.1.3 Overload Modules 506
Chapter 22 Try It Yourself 512
CHAPTER 23 Object Types in Oracle 513
LAB 23.1 Object Types 514
23.1.1 Use Object Types 522
23.1.2 Use Object Types with Collections 526
LAB 23.2 Object Type Methods 531
23.2.1 Use Object Type Methods 544
Chapter 23 Try It Yourself 554
CHAPTER 24 Oracle Supplied Packages 555
LAB 24.1 Making Use of Oracle Supplied Packages to Profile PL/SQL, Access Files, and Schedule Jobs 556
24.1.1 Access Files with UTL_FILE 563
24.1.2 Schedule Jobs with DBMS_JOB 563
24.1.3 Submit Jobs 564
LAB 24.2 Making Use of Oracle-Supplied Packages to Generate an Explain Plan and Create HTML Pages 568
24.2.1 Generate an Explain Plan with DBMS_XPLAN 572
LAB 24.3 Creating Web Pages with the Oracle Web Toolkit 578
24.3.1 Create an HTML Page with the Oracle Web Toolkit 594
APPENDIX A PL/SQL Formatting Guide 597
APPENDIX B Student Database Schema 601
APPENDIX C ANSI SQL Standards 607
APPENDIX D Answers to the Try It Yourself Sections 613
INDEX 705
Average Amazon.com® Rating: ![]()
![]()
![]()
![]()
Based on 8 Ratings
not deep - 2004-10-18
Reviewer Rating: ![]()
![]()
![]()
![]()
![]()
It is not as good as Alice Rischert's "Oracle SQL by example". Looks like it is written for people who never programed before. So it teaches how to program using examples of pl/sql. Might be good for beginners.
Well done. Oracle Education look out! - 2005-03-04
Reviewer Rating: ![]()
![]()
![]()
![]()
![]()
I'm a developer and DBA who had not written PL/SQL in over a year. I used this book as a refresher.
This is the "Learning Perl" of PL/SQL, meaning: a beginner can learn from it, and an experienced hack can use it as a reference.
I consider lots of good sample code to be important when learning a programming language. Here it is, as a series of labs, with intelligent discussion. It's like having a friend who's an expert act as a personal tutor. It has complete, well-rounded coverage of PL/SQL fundamentals: control structures, stored procedures, packages, and a good chapter on triggers. In rare cases where some keyword is introduced with no explanation, it's usually covered in the following section.
It is nearly the quality of Oracle course materials, but with (a tolerable amount of) typos. Annoyingly, some of the typos are incorrect answers in the appendix; the rest are obvious typos and therefore not too confusing.
Chapter 1 is deceptively basic, explaining what a program is, what a programming language is, etc., but chapter 2 jumps right into PL/SQL with no further ado. The book progresses in baby steps as far as PL/SQL is concerned. Although knowledge of SQL is assumed, some concepts like commit & rollback, savepoints, and sequences are introduced and explained for beginners. It is also assumed that the reader:
- knows what DML, DDL, and the DUAL table are;
- has an account that can create objects (the "Scott" demo account will do); and
- knows how to connect to the database with SQL*Plus or a development tool (IDE).
With an IDE I was able to work through it in about thirty hours. I just read chapters I was already strong in without working those labs, but that time included plenty of puttering and experimenting with the lab material I did work.
I also bought 10g "PL/SQL Programming" by Urman, et. al. but dove into this book first. The two books overlap. The freely available "PL/SQL User's Guide and Reference" from Oracle is still a must-have.
Densely packed with pertinent information and very little else, it's about 99% useful information. Like the blurb says, "Just the facts." It is a complete Oracle course, so it was worth $2400 in that respect.
Provides a solid foundation - 2005-02-28
Reviewer Rating: ![]()
![]()
![]()
![]()
![]()
The book provides very solid foundation of PL\SQL. It wisely covers the basics and repeats them in a format which isn't too redundant. For example, there are several chapters on Loops (simple, cursor, while, nested etc). This makes sense since loops are extremely important part of PL\SQL. The PL\SQL code examples are very well thought out and the test questions are very thought provoking.
The book does not cover advanced topics such as temporary global tables and performance tuning PL\SQL code, but that is beyond the scope of this book anyhow.
Suprisingly, I thought the chapter on stored procedures was very weak. It was almost nonexistent. The book spends almost 3 times as much text on Triggers than on stored procedures. This was a mistake since triggers are rarely used because of its performance constraints. Stored procedures, on the other hand, are the bread and butter of PL\SQL.
Good Book - 2006-12-14
Reviewer Rating: ![]()
![]()
![]()
![]()
![]()
Good introductory level book which has sufficient depth (not just list of statements!).
Pluses:
1) Lots of little explanations that aren't available in the Manuals, which help to put things in perspective,even for experienced programmers who aren't familiar with PL/SQL.
2) Plenty of examples, and code to run.
3) Good review questions and explanations.
4) Covers most topics to a reasonable level for an introductory book.
Minuses:
1) Too many wrong answers (typos), which can confuse novices who aren't sure of their understanding.
2) Some explanations are a bit confusing, especially towards the later chapters - it is better stated in the Manual.
PL/SQL by Example Needs More Basic Examples - 2009-03-19
Reviewer Rating: ![]()
![]()
![]()
![]()
![]()
While the book appears comprehensive, it is not designed for beginners. If you are a PL SQL user who has only select proviledges, you need more in-depth examples of how to construct complex nested queries in order to obtain your data analysis objective.
This is a good book for more advanced users who have total access to all levels of SQL resources.
Some information on this page was provided using data from Amazon.com®. View at Amazon >