Got it from Andy’s Blog:
Within ApEx PL/SQL Processes, regions and items you can use the bind variable syntax (:PX_MY_ITEM) both to read and set the value of that item held in session state. Like so:
:PX_MY_ITEM := 'wibble'; l_my_local_variable := :PX_MY_ITEM;
However, in stored PL/SQL packages, procedures and functions you cannot use the bind variable syntax. Rather, you must use the v(‘PX_MY_ITEM’) syntax. But this is read only.
So how do you set the value held in session state for a given page item from within a stored package, procedure or function?
The answer lies in the set_session_state procedure found in the APEX_UTIL package. E.g.
APEX_UTIL.set_session_state( p_name => 'PX_MY_ITEM' , p_value => 'wibble');