Instructs the SQL module processor to execute module language
procedures in the context of a particular distributed
transaction. When you use this qualifier, SQL generates an
additional parameter for the procedures and places the parameter
as the last parameter declared in the procedure.
Following are the options you can specify with the CONTEXT=
qualifier:
o NONE
Specifies that the SQL module processor does not add a context
parameter to any procedure in the module.
o ALL
Specifies that the SQL module processor adds a context
parameter to every procedure in the module.
o procedure-list
Specifies that the SQL module processor adds a context
parameter to each procedure listed. If you specify an entry
name for a procedure in the list, the SQL module processor
changes the name of that procedure to the name specified.
For example, you can specify the following qualifier on the
command line:
/CONTEXT=(OPEN_PROC :OPEN_PROC_DIST, FETCH_PROC :FETCH_PROC_DIST,-
CLOS_PROC :CLOS_PROC_DIST)
SQL passes the context parameter to the OPEN_PROC, FETCH_
PROC, and CLOS_PROC procedures and gives them the new names
specified. For more information, see the Oracle Rdb7 Guide to
Distributed Transactions.
Your application must use the context structure to pass the
address of the distributed TID from the host language program
to procedures in the module that are involved in the distributed
transaction. You pass the context structure to procedures that
contain executable SQL statements, except statements that
you cannot execute when a transaction is already started or
statements that you cannot use when you explicitly call the
DECdtm system services. the Oracle Rdb SQL Reference Manual
lists the nonexecutable statements that do not take a context
structure.
You can also use the CONTEXT qualifier to specify a new name for
a procedure.
Qualifiers used with the CONTEXT qualifier specify which
procedures receive context parameters, and whether or not the
names of the procedures are changed.
Because you cannot use batch-update transactions with distributed
transactions, you should define the SQL$DISABLE_CONTEXT logical
name as True before you start a batch-update transaction.
(Distributed transactions require that you are able to roll back
transactions. Because batch-update transactions do not write to
recovery-unit journal (.ruj) files, batch-update transactions
cannot be rolled back.)
If you attempt to start a distributed transaction using a batch-
update transaction, what happens depends upon whether you call
the DECdtm system services implicitly or explicitly and which SQL
statement you use to start the transaction:
o If you start a batch-update transaction and explicitly call
the DECdtm system services, SQL returns an error at compile
time.
o If you start a batch-update transaction and implicitly call
the DECdtm system services, SQL takes the following actions:
- If you use a SET TRANSACTION statement with the BATCH
UPDATE clause, SQL starts a nondistributed transaction.
- If you use a DECLARE TRANSACTION statement with the BATCH
UPDATE clause, SQL returns an error at compile time.
The two-phase commit protocol applies only to distributed
transactions. For more information about distributed
transactions, see the Oracle Rdb7 Guide to Distributed
Transactions.