J'ai une table que les gens ont été l'insertion dans l'obtention de la clé primaire en faisant unel'aide d'une séquence sur une table existante
SELECT max(id)+1 from table_a;
Je veux ajouter des enregistrements à cette table en utilisant un SQL simple, INSERT INTO table_a SELECT ... FROM table_b, table_c ...
script, et je me demande comment générer les clés primaires. Ma première pensée était de créer une séquence temporaire, mais Oracle n'a évidemment pas de select setval
pour définir la première valeur. Alors, comment puis-je obtenir la valeur actuelle de max (id) +1 pour définir le paramètre "start with" sur ma séquence?
je trouve quelque chose en ligne que je pensais travailler:
COLUMN S new_value st select max(id)+1 S from table_a;
CREATE SEQUENCE cra_seq start with &st;
Mais il n'utilise pas réellement st dans le CREATE SEQUENCE
mais me invite à entrer, ce qui est pas ce que j'ai besoin.
Il vous invite à entrer un paramètre car sql * plus échappe à "&". Mettez "set define off" comme première ligne de votre script et réessayez. –
Avez-vous déjà eu l'occasion d'insérer plus d'une personne dans cette table en même temps? Si c'est le cas, toutes les méthodes d'utilisation de max (id) échoueront car chaque session simultanée se retrouvera avec le même identifiant max. Que diriez-vous juste de créer une séquence et l'utiliser comme source de vos identifiants pour toutes les insertions de table? –
@Nick, croyez-moi, je sais à quel point la méthode "select max (id)" est horrible. J'ai essayé de les convaincre de passer à une séquence, mais les pouvoirs en place disent "oh, nous allons changer pour la prochaine sortie, donc ce sera ok pour l'instant". –