Non dovresti provare a prevenire l'iniezione di SQL solo a livello di database. Una volta arrivati, per lo più ti hanno già preso. Dovresti usare i parametri, mascherare l'input e rimuovere i caratteri non validi già nel livello sopra. Strumenti (framework?) come Entity Framework rimuovono automaticamente i caratteri pericolosi.
Utilizzando DBMS_ASSERT.ENQUOTE_NAME
sta andando molto bene qui, ma consiglierei di farlo anche nei livelli sopra.
Regola generale (che segui qui):Utilizza meccanismi di sicurezza consolidati e collaudati, non reinventarli!
Inoltre, una dichiarazione come
select * from users where username = 'IAm"WayUp';
è assolutamente legale e non pericoloso.
E come si chiama la funzione/procedura nel DB? Anche tu sei vulverabile lì, vero?.