Nie powinieneś próbować zapobiegać wstrzykiwaniu SQL tylko na poziomie bazy danych. Kiedy już tam dotarli, w większości już cię dopadli. Powinieneś użyć parametrów, zamaskować dane wejściowe i usunąć złe znaki już w warstwie powyżej. Narzędzia (Frameworks?), takie jak Entity Framework, automatycznie usuwają niebezpieczne znaki.
Korzystanie z DBMS_ASSERT.ENQUOTE_NAME
radzi sobie bardzo dobrze tutaj, ale polecam zrobić to również w warstwach powyżej.
Ogólna zasada (której przestrzegasz tutaj):Używaj sprawdzonych i sprawdzonych mechanizmów bezpieczeństwa, nie wymyślaj ich na nowo!
Co więcej, stwierdzenie takie jak
select * from users where username = 'IAm"WayUp';
jest całkowicie legalne i nie jest niebezpieczne.
A jak nazywasz funkcję/procedurę w DB? Tam też jesteś bezbronny, prawda?