I had written this function around midnight and fogot some comments:

1. about db security:
U must grant permitions select and UPDATE to table MOBUSER all users,
who work with this application !!! BUT THIS IS TABLE WITH OPEN PASSWORDS !!!
Do u sure, that u want it?

2. this procedure/function sould have :
PRAGMA AUTONONIMOUS_TRANSACTION and
sould have commit statment.

=============================================
create or replace procedure pwd_change(p_MOBNO varchar2 in, mob_pwd out,mob_status out )
as
rm MOBUSER%rowtype;
n number(20);
PRAGMA AUTONONIMOUS_TRANSACTION;
begin
...
...

commit;

...
end;
/

=============================================

3. about changing by sona:
update MOBUSER set password = substr(to_char(n),1,4)
password1 = substr(to_char(n),1,4) ,
status = 'NEW' where mobno = p_mobno;
substr(to_char(n),1,4) <-- absolutly not need because:

n := dbms_utility.get_hash_value( p_MOBNO || to_char(sysdate), 8999, power(2,30)) + 1000;

generate exactly 4 digit key between 1001 and 9999,
may be we have to change power(2,30) to --> power(2,31) - 1
this koefficient can generate little bit more random sequence of numbers.
(see D. Knut "Art of programming Vol 2. "Random sequences"".)