Какая версия формы?
Метод грубой силы:
v_prohibited_chars VARCHAR2(100) := '!@#$%^&*';
v_result VARCHAR2(4000);
...
-- strip prohibited characters
v_result := TRANSLATE(:form_field,'A'||v_prohibited_chars,'A');
-- if anything was stripped, lengths will differ
IF LENGTH(:form_field) <> LENGTH(v_result) THEN
error...
END IF
Если я правильно понимаю ваш комментарий, хотите ли вы отфильтровать специальные символы из поля формы?
Приведенный выше код делает это и помещает результат в v_result. Итак, если у вас есть входное значение 'ABC # DEF #', и ваша маска фильтра - '! @ # $% ^ & *', То после выполнения TRANSLATE ваш результат будет 'ABCDEF'. Затем вы можете переназначить это значение в поле формы. Если вы просто хотите беззвучно удалить символ, вы можете пропустить проверку ДЛИНЫ и просто назначить вывод TRANSLATE обратно в поле формы:
:form_field := TRANSLATE(:form_field,'A'||v_prohibited_chars,'A');
То, что делает TRANSLATE, проверяет символы в первом параметре на соответствие символам во втором параметре. Когда он находит совпадение, он переводит этот символ в соответствующий символ в третьем параметре. Если в третьем параметре нет соответствующих символов для одного во втором, то символ переводится в NULL. Если символ не появляется во втором параметре, он остается неизменным. Таким образом, символ «А» переводится в «А», а все остальные символы в маске переводятся в NULL. Третий параметр не может быть NULL, следовательно, фиктивный перевод «A» в «A».