The Apex stnadard dml processes have a validation that checks if a row/item is changed. If you use ac ustom process for dml, you can write a validation referencing each item and check if the value in session state corresponds with the value on the screen, eg:
l_my_item_db varchar2(4000) := APEX_UTIL.GET_SESSION_STATE ( Pxx_MY_ITEM) ;
l_my_item_nw varchar2(4000) := v('Pxx_MY_ITEM');
if l_my_item_db <> l_my_item_nw
If you have a table of apex_item type items, then you can reference your table items using f_arrays:
for i in 1 .. apex_application.g_f01.count
Can you replicated the issue on apex.oracle.com.
Because as Vincent stated the standard DML process only updates the rows that are changed by the user.
So for what ever reason the standard DML process thinks the user has changed the rows even when the user hasn't done this.
There could be several reason why the DML process gets it wrong.
A post calculation computation. Items that are added later.
It is better to first find the cause of the DML process getting it wrong then trying to replicate what it should be doing.
I had similar problems!
For each value I created two items. One as normal, where you can change the value and a second, which is a hidden item.
In both I load during page rendering the actual value of the table column.
So if you change the value of the 'normal' item you could do during page processing a validation.
You could compare, if these two items (the normal and the hidden) have different values.
Than cou could allow the update. If not, deny it.
I hope it helps
i think the best way is as you stated that i create a procedure which does the DML process instead of the standard DML process. In this procedure i can check in case of an update whether in minimum one column of the row has changed, if yes then i do an update in the database otherwise no update is done.
Many thanks and regards,