DB2 9.7 ??? ?? – ?? ????(Autonomous Transactions)
1. ??
DB2 V9.7? ??? ??? ?? ????? ?? ?? ?? ??? ?? ??? ?????.
?? ????? DB ??? ? ????? ??? ?????? ??? ? ????.
??? ?? ?? ???? ??? ?? ? ? ??? ????, ??? ??? DB2 V9.7 LUW ??? ?????.
2. ?? ????? ?? ??
?? ????? ???? ????? ?? ??? ??? ?? ?? ?? ?? COMMIT, ROLLBACK ??? ??? ????. ??? ???, ??? ??? COMMIT, ROLLBACK? ?? ?? ???? ?? ??? ?? ??? ?? ???.
?? ?? ??? ???? ??? ??? ???? ???? ???? ??? ???, ?? ???? ???? ?? ?? ??? ?? ???? ??? ?????.
3. ?? ???? ???
DB2 ???? ?? ????? ?? ????? ?? ?????. CREATE PROCEDURE ?? AUTONOMOUS ???? ?? ?? ????? ??? ? ????. [? 1. ??]
? 1. CREATE PROCEDURE ?? ?
CREATE OR REPLACE your_procedure_name
LANGUAGE SQL
AUTONOMOUS
BEGIN
do autonomous work ;
END
|
?? ????? ????? ??? ??? ?? ???? ???? ??? ???. ?? ?? ????? ?? ????? comit? ????, ? ??? ?? rollback? ?? ???. ?? ????? ???? ?????.
4. ? ?? ?
[????] B ????? ???? ??? ?? ??? ?? ?? ?? ?? ??? ??? ??? ????. ??? B ?? ?????? ???? ?? ???? ???? ?????? ?? ???? ????? ???????. ? ???? ?????? ???? ?? ??? ???? ???ID, ??? ??? ?? ??, ?? ??? ??? ?? ??? ???????.
Ø ?? ? ?? ??
l ??????? ??? ?? ??? ?.
l Auto commit? off ???
l ?? ??? ??? ??? ????? ?? ??? ?? ??? ‘%’? ??
l ??? ‘DB2 CLP(Command Line Processor) ??? ????, ??? ?? CLP ???? ?????.
db2 +c –td% -f <???>
4.1. ??? ??
?? ???? ?? ??? ???. ? ?? ????? ??? ?? ??? ??? ??, ?? ????? ?? ?? ?? ??? ?????. [? 2. ??]
? 2. ??? DDL
DROP TABLE customerSensitiveInfo %
CREATE TABLE customerSensitiveInfo (
customerAccountNumber integer,
amountOverdue integer) %
DROP TABLE log_table %
CREATE TABLE log_table (
queryingEmployeeID varchar(100),
customerAccNumber integer,
when timestamp) %
COMMIT %
|
???? ?? ??? ?? ?? ? log_table? ???? ????? ?????. [? 3. ??]
? 3. LOG ??? ??? ?? ????
CREATE OP REPLACE PROCEDURE log_query
(in queryingEmployee varchar(100), in accNumber integer, in when timestamp)
LANGUAGE SQL
BEGIN
Insert into log_table values (queryingEmployee, accNumber, when) ;
END %
COMMIT %
|
B ?? ?????? ???? get_AmountOverdue ????? ?? customerSeneitiveInfo ???? ?? ???? ??? ??? ? ?? ??? ??? ?? log_query ????? ????? ?????. [? 4. ??]
? 4. get_AmountOverdue ????
CREATE OR REPLACE PROCEDURE get_AmountOverdue
(in accountNumber integer, out overdue integer)
LANGUAGE SQL
BEGIN
DECLARE due integer ;
DECLARE currentTime timestamp ;
SET currentTime = CURRENT TIMESTAMP ;
CALL log_query(CURRENT USER, accountNumber, currentTime) ;
SELECT amountOverdue INTO due FROM customerSensitiveInfo
WHERE customerAccountNumber=accountNumber ;
SET overdue=due;
END %
COMMIT %
|
Get_AmountOverdue ?????? ??? ??? customerSensitiveInfo ???? ??? ?? ??? ????? ?????. [? 5. ??]
? 5. ?? ??? ??
INSERT INTO customerSensitiveInfo VALUES (123435, 10000), (12346, 20000) %
COMMIT %
|
??? ?? ???? ? ?? ??? ??? ?????. [?? 1. ??]
?? 1 . CustomerSensitiveInfo
?? get_AmountOverdue ????? ?? ‘12345’ ??? ?? ??? ?? ? ??? ?????. ?? ? ?? ROLLBACK ??? ?? ??? ? ?? ??? ???? ?? ?? ??? ????. [?? 2. ??]
?? 2. ?? ?? ?? ? ?? ?? ??
?? ?? ?? ? ROLLBACK? ??? ?? log_table? ?? ??? ?? ?? ?? ?? ??? ???. ?? log_query ????? AUTONOMOUS ???? ???? ?? ????? ? ?? ? ?????. [? 6. ??]
? 6. ?? ????? ???? log_query ????
CREATE OP REPLACE PROCEDURE log_query
(in queryingEmployee varchar(100), in accNumber integer, in when timestamp)
LANGUAGE SQL
AUTONOMOUS
BEGIN
Insert into log_table values (queryingEmployee, accNumber, when) ;
END %
COMMIT %
|
?? ??? ?? ?? ?? ? ??? ?????. [?? 3. ??]
?? 3. AUTONOMOUS ?? ? log_table ?? ??
?? ??? ?? rollback ?? ????? ?? ????? log_table?? commit ? ?? ?? ?? ?? ? ? ????. ? ?? ??? ????? ?? ?? ?? ??? ????? ??? ??? ?? ??? ?? ?? ????.
|