Das Problem besteht darin, dass die erste Spalte ein numerischer Datentyp ist, Ihre vorbereitete Anweisung jedoch einen String/VARCHAR-Datentyp übermittelt. Die Anweisung wird so ausgeführt, wie sie ist, Oracle hat keine Möglichkeit, Ihre Verwendung von nextval umzuwandeln, um den Sequenzwert zu erhalten.
Hier ist eine Alternative über Javas PreparedStatement-Syntax:
sql = "INSERT INTO USER
(USER_PK, ACCOUNTNUMBER, FIRSTNAME, LASTNAME, EMAIL )
VALUES
(user.nextval, ?, ?, ?, ?)";
ps = conn.prepareStatement(sql);
ps.setString(1, accountNumber);
ps.setString(2, firstName);
ps.setString(3, lastName);
ps.setString(4, email);
Dies setzt voraus, dass user
ist eine vorhandene Sequenz -- entsprechend ändern.