The alert code is generated when the page is rendered. So it will contain the value P0_URL has when the page is rendering. When you change the session state afterwards, for example through a dynamic action, won't reflect in already replaced string substitution variables.
alert( $v("P0_URL") );
Make sure that you've correctly returned P0_URL from the previous step though.
Thanks for response, i try it but its still no value appear in alert,
the first step also return value, its never will be null value;
If that alert, that exact code, is showing null, then P0_URL is empty. Have you verified the content of this item? Where exactly do you run that plsql code? In the set value block? As what: plsql function? What items is being set: P0_URL?
Selection Type - Item
Items - P0_URL
Please make these changes and see if you get what you want.