sql - Oracle DBMS - Manage concurrency between transactions -
i have stored procedure fires whenever new user enrolls on system - upon enrolling message forwarded prompting them change there password on after
trigger.
create or replace trigger trg_users_after after insert or update on users each row begin -- alert user need change password if :new.pass_changed = 0 send_message(:new.user_id, null, 'alert','thank-you registering, please change password security reasons!', null); updatechanged(:new.user_id); end if; end;
currently having problem both methods trying acquire lock commit process, results in deadlock - understand why happens, how go managing concurrency in oracle ensure send_message()
finishes transaction before updatechanged()
fired?
send message:
create or replace procedure send_message( to_user users.user_id%type, from_user users.user_id%type, msg_type string, this_message string, request_id requests.requests_id%type ) pragma autonomous_transaction; begin insert messages values('', to_user, from_user, msg_type, this_message, '', '', request_id); commit; end send_message;
update changed:
-- updates password changed field 2 -- @param - user need update create or replace procedure updatechanged( this_user users.user_id%type ) pragma autonomous_transaction; begin update users set pass_changed = 2 user_id = this_user; commit; end updatechanged;
any suggestions appreciated - alex.
Comments
Post a Comment