Вы можете начать с параметра печати, а затем удалить любые не алфавитно-цифровые символы:
select SUBSTR(
TRANSLATE(dbms_random.string('p',100)
,'A`~!@#$%^&*()-=_+[]\{}|;'':",./<>?'
,'A')
,1,10) from dual;
(Примечание: очень редко это будет возвращать менее 10 символов)
или,сопоставьте оскорбительные символы с другими буквами и цифрами (хотя это немного уменьшило бы случайность):
select TRANSLATE(dbms_random.string('p',10)
,'A`~!@#$%^&*()-=_+[]\{}|;'':",./<>? '
,'A' || dbms_random.string('x',33)) from dual;
Кстати, отличный вопрос.
Теперь, для моих бонусных очков:
Причина, по которой Oracle не реализовал это, заключается в том, что никто не просил об этом, и это, вероятно, не является высоким приоритетом.