I'm sorry but it is a little unclear to me exactly what you are trying to do. My suggestion would be that you use a trigger for this, that way every time a row is inserted into table_b the trigger will fire and either insert a new row or update a row in table_a. Try something like:
create or replace trigger table_b_trg after insert on table_b for each row begin update table_a set value_id = :new.value_id WHERE condition LIKE ‘%so and so%’;
You will need to ensure you have a condition though otherwise you will have the same problem and update every row.
Oracle Sequences do not guarantee "gap free" numbers.
Oracle Sequences do not guarantee ORDER. -- this is especially true for RAC environments.
It is VERY POSSIBLE for the second user to get a SMALLER VALUE than what the first user had received.
I suggest you CREATE VIEW
PS - "triggers" have their own set of problems. I recommend against using them.
It would help to know a little more about your use case and/or the realtionship between tables A and B. Something seems backwards that you would create a foreign reference and then update what sounds like a parent table with a foreign key.
That being said, you should only get the nextval from your sequence as often as you need a new value. if you are going to insert 1 or 5 or 10 rows and you wnat them all to have the same value_ID then get that value first
select sequence.nextval from dual;
put that into a page item or other variable and use it for as long as you need the number and then clear it when you are done. this way you wont have to lookup a value you just inserted.