Wow, what a pice of code you have written - a package, a procedure, a trigger and yet another trigger! All that for the same thing you could get with a single statement if you were using sequence!!!! You said you can't use sequences - any particular reason for that?

Now why you get ORA-00001? Because all the records you are inserting have their key kolumn TestID set to 0 - you explicitely set it to 0 in your before insert trigger. For any one of them, no exceptions.

Another thing with this aproach (even after you solve that problem with TestId=0): You will still get ORA-00001 if by any chance there is more than one session that will concurently insert into your table. There is nothing to stop Oracle to return the same MAX(TestID) from your table TblTest to more than one session if they insert rows simultaneously!!!!!