Trim the % character from the right of the string and normalise the decimal point to a single character and then use TO_NUMBER with the DEFAULT NULL ON CONVERSION ERROR, which is available from Oracle 12:
SELECT value,
TO_NUMBER(
REPLACE(RTRIM(value, '%'), ',', '.') DEFAULT NULL ON CONVERSION ERROR,
'999999.99'
) AS number_value
FROM table_name
Which, for the sample data:
CREATE TABLE table_name (ID, value) AS
SELECT 1, '0,46' FROM DUAL UNION ALL
SELECT 2, '25%' FROM DUAL UNION ALL
SELECT 3, 'No information' FROM DUAL UNION ALL
SELECT 4, 'Twenty two' FROM DUAL UNION ALL
SELECT 5, '12.2' FROM DUAL UNION ALL
SELECT 6, '365%' FROM DUAL UNION ALL
SELECT 7, '54' FROM DUAL;
Outputs:
| VALUE |
NUMBER_VALUE |
| 0,46 |
.46 |
| 25% |
25 |
| No information |
null |
| Twenty two |
null |
| 12.2 |
12.2 |
| 365% |
365 |
| 54 |
54 |
fiddle