Why does CURRENT_TIMESTAMP return the same value for each row?
This is as designed. CURRENT_TIMESTAMP gives the same consistent value for the entire stack of statements. This means that CURRENT_TIMESTAMP will have the same value in the same statement, and also during the execution of a stored procedure and various stored procedures it might call in turn.
If you wish to get the 'current' time instead of 'statement' time, use 'now' which is a special value:
select cast('now' as timestamp)
Since 'now' is a string, it is evaluated (coverted to timestamp) at each execution.