Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
20 Transaction Processing Copyright Ó Oracle Corporation, 1999. All rights reserved. Objectives After completing this lesson, you should be able to do the following: • Describe details of commit processing and commit triggers • Supplement transaction processing by using triggers • Allocate sequence numbers to records as they are applied to tables • Implement array DML 20-2 Copyright Ó Oracle Corporation, 1999. All rights reserved. Transaction Processing FORM A Action Edit Save Transaction (Begin) Block#1 UPDATE Table1 New Record Updated Record Block#2 Updated Record Deleted Record Transaction (End) 20-3 INSERT INTO Table1 DELETE FROM Table2 UPDATE Table2 Commit work; Copyright Ó Oracle Corporation, 1999. All rights reserved. Transaction Processing Transaction processing includes two phases: • Post: – Writes record changes to base tables – Fires transactional triggers • Commit: Performs database commit Errors result in: • • 20-4 Rollback of the database changes Error message Copyright Ó Oracle Corporation, 1999. All rights reserved. The Commit Sequence of Events Validate the form Pre-Commit 2 Validate the block More records? Pre-Delete On-Delete Delete row Post-Delete 1 20-5 Copyright Ó Oracle Corporation, 1999. All rights reserved. The Commit Sequence of Events INSERT 1 UPDATE More records? Copy value from item Pre-Insert Pre-Update Check uniqueness On-Insert Insert row Post-Insert Check uniqueness On-Update Update row Post-Update 2 More blocks? Post-Forms-Commit Stop 20-6 Commit changes Post-Database-Commit Copyright Ó Oracle Corporation, 1999. All rights reserved. Characteristics of Commit Triggers • Pre-Commit: Fires once if form changes are made or uncommitted changes are posted • • Pre- and Post-DML On-DML: Fires per record, replacing default DML on row Use DELETE_RECORD, INSERT_RECORD, UPDATE_RECORD built-ins 20-7 Copyright Ó Oracle Corporation, 1999. All rights reserved. Characteristics of Commit Triggers • Post-Forms-Commit: Fires once even if no changes are made • Post-Database-Commit: Fires once even if no changes are made Note: A commit-trigger failure causes a rollback to the savepoint. 20-8 Copyright Ó Oracle Corporation, 1999. All rights reserved. Commit Triggers Uses Pre-Commit Check user authorization; set up special locking Pre-Delete Journaling; implement foreign-key delete rule Pre-Insert Generate sequence numbers; journaling; automatically generated columns; check constraints Pre-Update Journaling; implement foreign-key update rule; auto-generated columns; check constraints 20-9 Copyright Ó Oracle Corporation, 1999. All rights reserved. Commit Triggers Uses On-Insert/Update/Delete Replace default block DML statements Post-Forms-Commit Check complex multirow constraints Post-Database-Commit Test commit success; test uncommitted posts 20-10 Copyright Ó Oracle Corporation, 1999. All rights reserved. Life of an Update Item Query 20 30 20 [Save] 30 20 Pre-Update 30 20 Row Updated updated 30 30 20 Post-Update 30 30 20 30 30 Update record in form Commit 20-11 Column Rollback Locked Data 20 Copyright Ó Oracle Corporation, 1999. All rights reserved. Delete Validation • • Pre-Delete trigger Final checks before row deletion DECLARE CURSOR C1 IS SELECT ’anything’ FROM S_ORD WHERE customer_id = :S_CUSTOMER.id; BEGIN OPEN C1; FETCH C1 INTO :GLOBAL.dummy; IF C1%FOUND THEN MESSAGE(’There are orders for this customer!’); RAISE form_trigger_failure; ELSE CLOSE C1; END IF; END; 20-12 Copyright Ó Oracle Corporation, 1999. All rights reserved. Assigning Sequence Numbers SELECT INTO FROM S_ORD_ID.nextval :S_ORD.id SYS.dual; Insert Pre-Insert ID 601 Value Value Database Sequence 20-13 Copyright Ó Oracle Corporation, 1999. All rights reserved. Keeping an Audit Trail • • Write changes to nonbase tables. Gather statistics on applied changes. Post-Insert example: :GLOBAL.insert_tot := TO_CHAR(TO_NUMBER(:GLOBAL.insert_tot)+1); 20-14 Copyright Ó Oracle Corporation, 1999. All rights reserved. Testing the Result of Trigger DML • • • SQL%FOUND SQL%NOTFOUND SQL%ROWCOUNT UPDATE S_ORD SET date_shipped = SYSDATE WHERE id = :S_ORD.id; IF SQL%NOTFOUND THEN MESSAGE(’Record not found in database’); RAISE form_trigger_failure; END IF; 20-15 Copyright Ó Oracle Corporation, 1999. All rights reserved. DML Statements Issued During Commit Processing INSERT INTO base_table VALUES (base_column, base_column,...) (:base_item, :base_item, ...) UPDATE SET base_table base_column = :base_item, base_column = WHERE :base_item, ... ROWID = :ROWID DELETE WHERE FROM base_table ROWID = :ROWID 20-16 Copyright Ó Oracle Corporation, 1999. All rights reserved. DML Statements Issued During Commit Processing Rules: • DML statements may fire database triggers. • Form Builder uses and retrieves ROWID. • The Update Changed Columns Only and Enforce Column Security properties affect UPDATE statements. • Locking statements are not issued. 20-17 Copyright Ó Oracle Corporation, 1999. All rights reserved. Overriding Default Transaction Additional transactional triggers: Trigger Do-the-Right-Thing Built-in On-Check-Unique CHECK_RECORD_UNIQUENESS On-Column-Security ENFORCE_COLUMN_SECURITY On-Commit COMMIT_FORM On-Rollback ISSUE_ROLLBACK On-Savepoint ISSUE_SAVEPOINT On-Sequence-Number GENERATE_SEQUENCE_NUMBER 20-18 Copyright Ó Oracle Corporation, 1999. All rights reserved. Overriding Default Transaction Transactional triggers for logging on and off: Trigger Do-the-Right-Thing Built-in Pre-Logon - Pre-Logout - On-Logon LOGON On-Logout LOGOUT Post-Logon - Post-Logout - 20-19 Copyright Ó Oracle Corporation, 1999. All rights reserved. Running with Data Sources Other than Oracle • Three ways to run against data sources other than Oracle – Oracle Open Gateways – Oracle Open Client Adapter for ODBC – Write appropriate transactional triggers 20-20 Copyright Ó Oracle Corporation, 1999. All rights reserved. Running with Data Sources Other than Oracle • Connecting with Open Gateway: – Cursor and Savepoint mode form module properties – Key mode and Locking mode block properties • Using transactional triggers: – Call 3GL programs – Database data block property 20-21 Copyright Ó Oracle Corporation, 1999. All rights reserved. Getting and Setting the Commit Status • • What is commit status? SYSTEM.RECORD_STATUS: – NEW – INSERT (also caused by control items) – QUERY – CHANGED 20-22 Copyright Ó Oracle Corporation, 1999. All rights reserved. Getting and Setting the Commit Status • SYSTEM.BLOCK_STATUS: – NEW (may contain records with status INSERT) – QUERY (also possible for control block) – CHANGED (block will be committed) 20-23 Copyright Ó Oracle Corporation, 1999. All rights reserved. Getting and Setting the Commit Status • SYSTEM.FORM_STATUS: – NEW – QUERY – CHANGED 20-24 Copyright Ó Oracle Corporation, 1999. All rights reserved. Getting and Setting the Commit Status • System variables versus built-ins for commit status • Built-ins for getting and setting commit status: – GET_BLOCK_PROPERTY – GET_RECORD_PROPERTY – SET_ RECORD _PROPERTY 20-25 Copyright Ó Oracle Corporation, 1999. All rights reserved. Getting and Setting the Commit Status • Example: If the third record of block S_ORD is a changed database record, set the status back to QUERY. • Warnings: – Do not confuse commit status with validation status. – The commit status is updated during validation. 20-26 Copyright Ó Oracle Corporation, 1999. All rights reserved. Array DML • • Performs array inserts, updates, and deletes Vastly reduces network traffic Empno Ename Job Hiredate 1234 Jones Clerk 01-Jan-95 1235 Smith Clerk 01-Jan-95 1236 Adams Clerk 01-Jan-95 1237 20-27 Clark Clerk 01-Jan-95 Fewer round trips (exact number depends on array size) 2 inserts 2 updates 1 delete Copyright Ó Oracle Corporation, 1999. All rights reserved. Database Effect of Array DML on Transactional Triggers PRE- Repeated for each insert, update, delete PRE- Fires DML DML POST- POSTFires Array DML Size = 1 20-28 Fires for each insert, update, delete Fires for each insert, update, delete Array DML Size > 1 Copyright Ó Oracle Corporation, 1999. All rights reserved. Implementing Array DML 1. Enable the Array Processing option. 2. Specify a DML Array Size of greater than 1. 3. Specify block primary keys. 20-29 Copyright Ó Oracle Corporation, 1999. All rights reserved. Summary • • • Post and commit phases • Characteristics and common uses of commit triggers • • • Overriding default transaction processing Flow of commit processing DML statements issued during commit processing Getting and setting the commit status Implementing Array DML 20-30 Copyright Ó Oracle Corporation, 1999. All rights reserved. Practice 20 Overview This practice covers the following topics: • Automatically populating order IDs by using a sequence • Automatically populating item IDs by adding the current highest order ID • Customizing the commit messages in the CUSTOMERS form • Customizing the login screen in the CUSTOMERS form 20-31 Copyright Ó Oracle Corporation, 1999. All rights reserved.