create table account (
account_no integer;
owner char(20),
balance float,
primary key (account_no));
insert into account values (1111,'Smith',500);
insert into account values (1112,'Smith',600);
i.e. Customer "Smith" has two accounts;
Account 1111 with balance 500
Account 1112 with balance 600.
To qualify for a loan, a customer must have
at least $1000 in all of his accounts.
Process I (Transfer Money)
s1: update account set balance = balance - 400
where account_id = 1111;
s2: update account set balance = balance + 400
where account_id = 1112;
Process II (Credit Check)
t1: sum = 0.0;
t2: select balance into :b where account_id = 1111;
t3: sum = sum + b;
t4: select balance into :b where account_id = 1112;
t5: sum = sum + b;
t6: if (sum < 1000) DENY LOAN else AUTHORIZE LOAN;
The execution sequence: s1;t1;t2;t3;t4;t5;s2;t6
will result in a DENY LOAN situation, which is erroneous.
BEGIN WORK LOCK TABLE account UPDATE account SET balance = balance - 400 WHERE account_id = 1111; UPDATE account SET balance = balance + 400 WHERE account_id = 1112; COMMIT WORK;