There is NO need at all to use dynamic sql, as you have a static table
name, and you can use bind variables.
Also your code contains an EXCEPTION WHEN OTHERS section, which must
considered to be a bug.
Just to be sure: a dynamic query is *always* parsed. Parsing is a
serialization mechanism as part of the shared pool will be locked
during parsing. This means your code will be unscalable.
--------
Sybrand Bakker
Senior Oracle DBA