Wierzę, że SQL%NOTFOUND zwraca true gdy nie zostaną znalezione żadne rekordy. Twój IF w takim przypadku oszacowałby się na true i dlatego zapisze swój put_line do terminala. Instrukcja SQL została wykonana pomyślnie. Jeśli wykonasz tę instrukcję SQL samodzielnie z wiersza poleceń, otrzymasz 0 zaktualizowanych/usuniętych wierszy, a nie błąd Oracle.
Jeśli chcesz rzucić wyjątek, możesz użyć RAISE wewnątrz twojego IF i wskaż go na wyjątek w bloku wyjątków, który chcesz wyrzucić.