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

Popular posts from this blog

apache - Remove .php and add trailing slash in url using htaccess not loading css -

javascript - jQuery show full size image on click -