Found out reason: it is because powerbuilder transaction attribute AutoCommid = false.
So looks like if client pb app set AutoCommid = false, even put commit transaction in SP, the transaction still not committed.
Not sure what's the solution for only change code in SP, not touch PB code.