ALLBASE/SQL Reference Manual (36216-90216)
Contents
5
EXISTS Predicate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Correlated Versus Noncorrelated Subqueries. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Outer Joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Using GENPLAN to Display the Access Plan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Generating a Plan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Displaying a Query Access Plan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Interpreting a Display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Updatability of Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
4. Constraints, Procedures, and Rules
Using Integrity Constraints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Unique Constraints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Referential Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Check Constraints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Examples of Integrity Constraints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Inserting Rows in Tables Having Constraints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
How Constraints are Enforced. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Using Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Understanding Procedures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Creating Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Executing Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Procedures and Transaction Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Using SQL Statements in Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Queries inside Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Using a Procedure Cursor in ISQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Error Handling in Procedures Not Invoked by Rules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Using RAISE ERROR in Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Recommended Coding Practices for Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Using Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Understanding Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Creating Rules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Techniques for Using Procedures with Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Error Handling in Procedures Invoked by Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Using RAISE ERROR in Procedures Invoked by Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Enabling and Disabling Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Special Considerations for Procedures Invoked by Rules. . . . . . . . . . . . . . . . . . . . . . . . . . 163
Differences between Rules and Integrity Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
5. Concurrency Control through Locks and Isolation Levels
Defining Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Understanding ALLBASE/SQL Data Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Use of Locking by Transactions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Basics of Locking. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Locks and Queries. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Costs of Locking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Defining Isolation Levels between Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Repeatable Read (RR). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Cursor Stability (CS). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174