Не трябва да се опитвате да предотвратите SQL инжектиране само на ниво база данни. След като са стигнали до там, те най-вече са ви хванали. Трябва да използвате параметри, да маскирате въвеждането и да премахнете лошите символи, които вече са в слоя по-горе. Инструменти (Frameworks?) като Entity Framework автоматично премахват опасни знаци.
Използване на DBMS_ASSERT.ENQUOTE_NAME
се справя много добре тук, но бих препоръчал да направите това и в слоевете по-горе.
Общо правило (което следвате тук):Използвайте установени и доказани механизми за сигурност, не ги преоткривайте!
Освен това изявление като
select * from users where username = 'IAm"WayUp';
е абсолютно законно и не е опасно.
И как се извиква функцията/процедурата в БД? И там си уязвим, нали?