One of the many possible solution is outlined below. It has two steps:
1. Create a function for each type of test you need to perform: one function to test values as numbers, one function to test values as dates, etc.
2. Create a trigger on your table, so whenever data is inserted or updated the appropriate functions are called to test the data. If a function returns a negative answer to the trigger, then the trigger should set the corresponding piece of data to NULL in the table.
For example, when your trigger calls a function like the one shown below it will get back a 1 if the input value was a number, or a 0 if the input parameter was not a number.
create or replace function fxn_is_number_valid
(i_number in varchar2)
v_answer := 0;
v_number := to_number(i_number);
v_valid := 1;
when others then v_valid := 0;
where regexp_instr(CODIGO_POSTAL ,'[[:alpha:]]') = 0
To check for the date, why don't you just set the field's datatype up as a date? You'll have to specify TO_DATE in your loads, but you shouldn't let the data get as far as into your table (unless this is a staging table of some kind or something).
If you have to, you could probably set up a FUNCTION for this one, as suggested above.