column precision exceeded. ORA-01438 is so unmeaningful
It would indeed be nice if Oracle provided more information for this error.  Until then here is an idea.  You could call a package to do the insert and the package could verify each of the values separately as follows:

drop table t1;
create table t1 (c1 number(3), c2 number(2), c3 number(1));


CREATE OR REPLACE PACKAGE p1 AS

   Procedure InsertData(iValue1 In Number, iValue2 In Number, iValue3 In Number);

END;
/

CREATE OR REPLACE PACKAGE BODY p1 AS

Procedure InsertData(iValue1 In Number, iValue2 In Number, iValue3 In Number) Is
   vValue1 T1.C1%Type;
   vValue2 T1.C2%Type;
   vValue3 T1.C3%Type;
   ePrecisionExceeded Exception;
   PRAGMA EXCEPTION_INIT(ePrecisionExceeded, -1438);
Begin
   INSERT INTO T1 VALUES (iValue1, iValue2, iValue3);
Exception
   When ePrecisionExceeded Then
      vValue1 := iValue1;
      vValue2 := iValue2;
      vValue3 := iValue3;
End;

END;
/

execute P1.InsertData(100,102,103);


The check is only done when the exception is raised, so the only overhead is the variable declaration.  You will know which value caused the exception based on the line number.  If this were the only reason to move logic into a package it might not be worth it, but since there are many other benefits, it is worth considering.