Математика | ||||
Beginning PL/SQL From Novice to Professional Donald J. Bales 488 str2007 | ||||
Beginning PL/SQL From Novice to Professional Donald J. Bales 488 str2007
Contents Foreword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xii About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv Introduction (The Big Picture) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvi ¦CHAPTE R 1 Genesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 An Entity Relationship Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Data Definition Language (DDL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 It’s Your Turn to Create a Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Indexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 DDL Again . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 It’s Your Turn to Create an Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Column Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Table Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 It’s Your Turn to Create a Constraint . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Insert . . .Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 It’s Your Turn to Insert with Values . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Insert . . . Select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 It’s Your Turn to Insert with Select . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Fix a Mistake with Update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 It’s Your Turn to Update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Update and Subqueries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 A Change in Order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 It’s Your Turn to Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 vi ¦CO N T E N T S Select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Query Your Heart Out . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Our Working Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Our Example Narrative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Our Example ERD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Create a Code Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 It’s Your Turn to Create Code Tables . . . . . . . . . . . . . . . . . . . . . . . . . 33 Create a Content Table. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 It’s Your Turn to Create Content Tables . . . . . . . . . . . . . . . . . . . . . . . 36 Create an Intersection Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 It’s Your Turn to Create Intersection Tables. . . . . . . . . . . . . . . . . . . . 38 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 ¦CHAPTE R 2 PL/SQL Is Square, Man! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Anonymous Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Anonymous Block Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 It’s Your Turn to Execute an Anonymous Block. . . . . . . . . . . . . . . . . 41 Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Common Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Catching an Exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Create a Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 It’s Your Turn to Create a Function . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Create a Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 It’s Your Turn to Create a Procedure . . . . . . . . . . . . . . . . . . . . . . . . . 49 Nested Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 An Example of Nesting Blocks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Rules for Nesting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Create a Package Specification. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 It’s Your Turn to Create a Package Specification . . . . . . . . . . . . . . . 56 Create a Package Body . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 It’s Your Turn to Create a Package Body . . . . . . . . . . . . . . . . . . . . . . 62 Benefits of Using Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 ¦CO N T E N T S vii ¦CHAPTE R 3 Now Where Did I Put That? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 PL/SQL Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Variable Naming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Variable Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Variable Anchors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Variable Assignments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 NULL Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 It’s Your Turn to Declare Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Scope Rules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 It’s Your Turn to Scope Things Out . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Table Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Record Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Single Dimension My Foot! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Parameter Naming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Parameter Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Parameter Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 It’s Your Turn to Declare Parameters . . . . . . . . . . . . . . . . . . . . . . . . . 91 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 ¦CHAPTE R 4 Whoa! One Statement at a Time, Please! . . . . . . . . . . . . . . . . 93 Inserts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 Catching a DUP_VAL_ON_INDEX Exception . . . . . . . . . . . . . . . . . . . 98 Using PL/SQL to Predetect a Duplicate . . . . . . . . . . . . . . . . . . . . . . 101 IF I Don’t Tell You Now, When ELSE Can I? . . . . . . . . . . . . . . . . . . . 107 Using SQL to Predetect a Duplicate . . . . . . . . . . . . . . . . . . . . . . . . . 108 It’s Your Turn to Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Updating a Row . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Using SQL to Perform Complex Updates . . . . . . . . . . . . . . . . . . . . . 116 Deletes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 Selects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 What Do You Mean, “No Data Found?” . . . . . . . . . . . . . . . . . . . . . . 121 Too Many Rows—You’re Kidding, Right? . . . . . . . . . . . . . . . . . . . . 123 It’s Your Turn to Select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 viii ¦CO N T E N T S ¦CHAPTE R 5 Next Please, One Row at a Time! . . . . . . . . . . . . . . . . . . . . . . . . 127 Cursors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Cursor Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Fetching Rows from a Cursor Manually . . . . . . . . . . . . . . . . . . . . . . 128 Cursor Records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 A Singleton Cursor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 It’s Your Turn to Fetch Manually . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 Fetching Rows from a Cursor Automatically . . . . . . . . . . . . . . . . . . 143 It’s Your Turn to Fetch Automatically . . . . . . . . . . . . . . . . . . . . . . . . 144 Bulk Collect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 Bulk Collect with a Cursor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 Bulk Collect with a Select Statement . . . . . . . . . . . . . . . . . . . . . . . . 151 It’s Your Turn to Bulk Collect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 For All . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 ¦CHAPTE R 6 Just Like It Is in the Real World! . . . . . . . . . . . . . . . . . . . . . . . . 163 Information Modeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 Object Orientation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Key Tenets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Reuse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 Service Orientation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 A Roadmap to Reality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 Step 1: Table Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Step 2: User-Defined Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Step 3: Object Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 Step 4: Object Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 A Change in Order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 Object Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Create a User-Defined Type Specification . . . . . . . . . . . . . . . . . . . . 170 Create a User-Defined Type Implementation. . . . . . . . . . . . . . . . . . 174 It’s Your Turn to Create a User-Defined Type . . . . . . . . . . . . . . . . . 179 Object Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 Create an Object View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 It’s Your Turn to Create an Object View . . . . . . . . . . . . . . . . . . . . . . 187 Object Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 Create an Object Table. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 It’s Your Turn to Create an Object Table . . . . . . . . . . . . . . . . . . . . . 189 ¦CO N T E N T S ix Impedance Mismatch My Foot! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 Nested Types and Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 It’s Your Turn to Prove There’s No Impedance Mismatch . . . . . . . 194 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 ¦CHAPTE R 7 So Just What’s Happening Here? . . . . . . . . . . . . . . . . . . . . . . . 211 Prevention . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 Anchors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Data Type Prefixes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Explicit Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Preparation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 Blocking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 Bread Crumbs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 After the Fact . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 Success Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 Failure Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 It’s Your Turn to Use put_line() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 As It Happens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 A DEBUG Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 A DEBUG Package. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 It’s Your Turn to Use Debug Logging . . . . . . . . . . . . . . . . . . . . . . . . 236 One Step at a Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Debugging with Oracle SQL Developer . . . . . . . . . . . . . . . . . . . . . . 243 Debugging Anonymous PL/SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 Debugging with TOAD for Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 Debugging with Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 It’s Your Turn to Use a Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 Profiling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 Profiler’s Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 Profiler’s Methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 Profiling Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 It’s Your Turn to Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 Hey, Don’t Forget SQL! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 Explain Plan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 Physics vs. Explain Plan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 It’s Your Turn to Use Explain Plan . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 TKPROF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 x ¦CO N T E N T S ¦CHAPTE R 8 Test, Test, Test, and Test Again . . . . . . . . . . . . . . . . . . . . . . . . . 275 SQL Test Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 PL/SQL Test Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 A Testing Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 A TEST Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 A TEST Package Specification. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 A TEST Package Body . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 It’s Your Turn to Create a Testing Tool . . . . . . . . . . . . . . . . . . . . . . . 295 Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 Testing a Code Table Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 It’s Your Turn to Test a Code Table Package. . . . . . . . . . . . . . . . . . 317 Testing a Content Table Package . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 It’s Your Turn to Test a Content Table Package . . . . . . . . . . . . . . . 325 Testing an Intersection Table Package . . . . . . . . . . . . . . . . . . . . . . 326 It’s Your Turn to Test an Intersection Table Package . . . . . . . . . . . 333 Testing a Type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 It’s Your Turn to Test a Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 Automating Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 Automate Test Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 It’s Your Turn to Automate Test Processing. . . . . . . . . . . . . . . . . . . 344 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344 ¦CHAPTE R 9 What Does This Thing Do Anyway? . . . . . . . . . . . . . . . . . . . . . 347 Indestructible Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 SQL*Plus Documentation Tools. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 GUI Development Environment Tools . . . . . . . . . . . . . . . . . . . . . . . . 350 Rules for Documentation Comments . . . . . . . . . . . . . . . . . . . . . . . . 353 Documentation on Demand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 A Text-Based Documentation Formatting Tool . . . . . . . . . . . . . . . . 353 Accessing Documentation on Demand . . . . . . . . . . . . . . . . . . . . . . 358 It’s Your Turn to Access Documentation on Demand . . . . . . . . . . . 359 Distributable Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 An HTML-Based Documentation Formatting Tool . . . . . . . . . . . . . . 360 Generating Distributable Documentation . . . . . . . . . . . . . . . . . . . . . 364 It’s Your Turn to Generate Distributable Documentation . . . . . . . . 366 Documentation Distribution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 ¦CO N T E N T S xi ¦CHAPTE R 10 Fairy Tales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 Polymorphic Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 The Unhappy SQL Programmer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 Code Table Methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 Content Table Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 Intersection Table Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 Hierarchical Table Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 The Black Box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 Table Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 Universal Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 Divide and Conquer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 Data Migration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396 On-Demand Data Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 Polling Data Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404 Interfacing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 Reporting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428 ¦APPENDIX How to Download, Install, and Use Oracle . . . . . . . . . . . . . . 431 How to Download Oracle Database Software . . . . . . . . . . . . . . . . . . . . . 431 How to Install Oracle Database Software . . . . . . . . . . . . . . . . . . . . . . . . . 437 How to Use SQL*Plus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443 How to Download This Book’s Source Code . . . . . . . . . . . . . . . . . . 444 How to Create a New Username . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 How to Write a SQL*Plus Script. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 How to Execute a SQL*Plus Script . . . . . . . . . . . . . . . . . . . . . . . . . . 448 How to Describe Your Tables and Stored Procedures . . . . . . . . . . 448 ¦I Цена: 200руб. |
||||