Я создал PACKAGE и PACKAGE BODY для оператора обновления,
Я не нашел ничего в StackOverFlow по этому поводу, интересно, хорошо ли я это сделал, и измените ли вы что-нибудь.
если я вызываю процедуру
begin
account_api.upd_account(1, 'user', 1000)
end;
Эти процедуры должны быть заблокированы до тех пор, пока я не завершу транзакцию с оператором фиксации
CREATE OR REPLACE PACKAGE account_api AS
PROCEDURE upd_account
(
p_acc_id accounts.acc_id%type
, p_acc_name accounts.acc_name%type
, p_acc_amount accounts.acc_amount%type
);
end account_api;
/
CREATE OR REPLACE PACKAGE BODY account_api AS
PROCEDURE upd_account (
p_acc_id accounts.acc_id%type
, p_acc_name accounts.acc_name%type
, p_acc_amount accounts.acc_amount%type
)
is
l_current_balance NUMBER;
l_new_balance NUMBER;
BEGIN
SELECT acc_amount INTO l_current_balance
FROM accounts
WHERE acc_id = p_acc_id
FOR UPDATE;
l_new_balance := l_current_balance + p_acc_amount;
IF l_new_balance < 0 THEN
raise_application_error(-20001, 'Sorry you re overdrawn');
END IF;
UPDATE accounts
SET acc_amount = l_new_balance,
acc_name = p_acc_name
WHERE acc_id = p_acc_id;
COMMIT;
end;
end account_api;
/