BEGIN WORK [ ALLBASE/SQL Reference Manual ] MPE/iX 5.5 Documentation
ALLBASE/SQL Reference Manual
BEGIN WORK
The BEGIN WORK statement begins a transaction and, optionally, sets one
or more transaction attributes.
Scope
ISQL, Application Programs, or Procedures
SQL Syntax
[RR]
BEGIN WORK [Priority] [CS] [LABEL {'LabelString'}] [[PARALLEL] FILL]
[RC] [ {:HostVariable}] [[NO ] ]
[RU]
Parameters
Priority is an integer from 0 to 255 specifying the
priority of the transaction. Priority 127 is
assigned if you do not specify a priority.
ALLBASE/SQL uses the priority to resolve a
deadlock. The transaction with the largest
priority number is aborted to remove the
deadlock.
For example, if a priority-0 transaction and a
priority-1 transaction are deadlocked, the
priority-1 transaction is aborted. If two
transactions involved in a deadlock have the same
priority, the deadlock is resolved by aborting
the newer transaction (the last transaction
begun, either implicitly or with a BEGIN WORK
statement).
RR Repeatable Read. Means that the transaction uses
locking strategies to guarantee repeatable reads.
RR is the default isolation level.
CS Cursor Stability. Means that your transaction
uses locking strategies to assure cursor-level
stability only.
RC Read Committed. Means that your transaction uses
locking strategies to ensure that you retrieve
only rows that have been committed by some
transaction.
RU Read Uncommitted. Means that the transaction can
read uncommitted changes from other transactions.
Reading data with RU does not place any locks on
the table being read.
LabelString is a user defined character string of up to 8
characters. The default is a blank string.
The label is visible in the SYSTEM.TRANSACTION
pseudo-table and also in SQLMON. Transaction
labels can be useful for troubleshooting and
performance tuning. Each transaction in an
application program can be marked uniquely,
allowing the DBA to easily identify the
transaction being executed by any user at any
moment.
HostVariable is a host variable containing the LabelString.
FILL is used to optimize I/O performance when loading
data and creating indexes.
PARALLEL FILL is used to optimize I/O performance for multiple,
concurrent loads to the same table. The PARALLEL
FILL option must be in effect for each load.
NO FILL turns off the FILL or PARALLEL FILL option for
the duration of the transaction. This is the
default fill option.
Description
* Detailed information about isolation levels is presented in the
"Concurrency Control through Locks and Isolation Levels" chapter.
* When you use most SQL statements, ISQL or the preprocessor
automatically issues the BEGIN WORK statement on your behalf,
unless a transaction is already in progress. However, to clearly
delimit transaction boundaries and to set attributes for a
transaction (isolation level, priority, transaction label, and
fill options), you can use explicit BEGIN WORK statements.
The following statements do not force an automatic BEGIN WORK to
be processed:
ASSIGN BEGIN ARCHIVE BEGIN DECLARE SECTION
BEGIN WORK CHECKPOINT COMMIT ARCHIVE
COMMIT WORK CONNECT DECLARE VARIABLE
DISABLE AUDIT LOGGING ENABLE AUDIT LOGGING END DECLARE SECTION
ASSIGN BEGIN ARCHIVE BEGIN DECLARE SECTION
BEGIN WORK CHECKPOINT COMMIT ARCHIVE
COMMIT WORK CONNECT DECLARE VARIABLE
DISABLE AUDIT LOGGING ENABLE AUDIT LOGGING END DECLARE SECTION
GOTO IF INCLUDE
PRINT RAISE ERROR RELEASE
RESET RETURN ROLLBACK TO SAVEPOINT
ROLLBACK WORK SET SESSION SET TIMEOUT
SET TRANSACTION START DBE STOP DBE
SQLEXPLAIN TERMINATE USER WHENEVER
WHILE
* See the "Using ALLBASE/SQL" chapter, "Scoping of Transaction and
Session Attributes" section for information about statements used
to set transaction attributes.
* Within a given transaction, the isolation level, priority, and
label can be changed by issuing a SET TRANSACTION statement.
Attributes specified in a SET TRANSACTION statement within a
transaction override any attributes set by a BEGIN WORK statement
for the same transaction.
* An application or ISQL can have one or more active transactions at
a time. Refer to the SET MULTITRANSACTION statement syntax in
this chapter.
* The following sequences of statements must be in the same
transaction in a program:
PREPARE and EXECUTE
PREPARE, DESCRIBE, OPEN, FETCH USING DESCRIPTOR, EXECUTE, and CLOSE
OPEN, FETCH, DELETE WHERE CURRENT, UPDATE WHERE CURRENT, and CLOSE (unless KEEP CURSOR is used)
* To end your transaction, you must issue a COMMIT WORK or ROLLBACK
WORK statement. Otherwise, locks set by your transaction are held
until a STOP DBE, DISCONNECT, RELEASE, or TERMINATE USER statement
is processed.
* If the maximum number of concurrent DBEnvironment transactions has
been reached, the application is placed on a wait queue. If the
application times out while waiting, an error occurs. Default and
maximum timeout values are specified at the DBEnvironment level.
To set a timeout for a session or transaction, use the SET USER
TIMEOUT statement. Refer to the "Using ALLBASE/SQL" chapter,
"Setting Timeout Values" section for further information.
* To avoid lock contention in a given DBEnvironment, do not allow
simultaneous transactions when performing data definition
operations.
* When using RC or RU, you should verify the existence of a row
before you issue an UPDATE statement. In application programs
that employ cursors, you can use the REFETCH statement prior to
updating. REFETCH is not available in ISQL. Therefore, you should
use caution in employing RC and RU in ISQL if you are doing
updates.
* If the FILL or PARALLEL FILL option has already been set for the
session with a SET SESSION statement, and you do not want either
of these options in effect for a given transaction, specify NO
FILL in the transaction's BEGIN WORK statement.
Authorization
You do not need authorization to use the BEGIN WORK statement.
Examples
1. BEGIN WORK and ROLLBACK WORK
Transaction begins:
BEGIN WORK CS
statement-1
SAVEPOINT :MyVariable
statement-2
statement-3
Work of statements 2 and 3 is undone:
ROLLBACK WORK TO :MyVariable
Work of statement-1 is committed and the transaction ends:
COMMIT WORK
2. BEGIN WORK and set attributes
Begin the transaction and set priority, isolation level, label
name, and fill option:
BEGIN WORK 32 CS LABEL 'xact1' FILL
:
Execute SQL statements.
:
Work is committed and the transaction ends.
COMMIT WORK
Begin another transaction and set priority, isolation level, and
label name. Note that since a fill option is not specified, the
default (NO FILL) is in effect.
BEGIN WORK 64 RC LABEL 'xact2'
:
Execute SQL statements.
:
Work is committed and the transaction ends.
COMMIT WORK;
MPE/iX 5.5 Documentation