++ for you eclark for pointing me to the docs
one more time :-)
I always tought it was correct, since I read this:
Advance the sequence object to its next value and return that value. This is done atomically: even if multiple sessions execute nextval concurrently, each will safely receive a distinct sequence value.
Return the value most recently obtained by nextval for this sequence in the current session. (An error is reported if nextval has never been called for this sequence in this session.) Notice that because this is returning a session-local value, it gives a predictable answer whether or not other sessions have executed nextval since the current session did.
About my problem:
I'm rewriting everything using:
use DBI qw(:sql_types);
and spliting the multiple statements I have.