Je dois migrer cette requête (simplifié ici) de T-SQL à Oracle
SET IDENTITY_INSERT table ON INSERT INTO table (id, value) VALUES (1, 2) SET IDENTITY_INSERT table OFF
3 Réponses :
Vous n'avez pas à désactiver l'identité d'Oracle. Puisque vous utilisez des séquences, ne l'utilisez pas pour cet insert.
c'est-à-dire, au lieu de p> vous utilisez p> Quant à votre deuxième question sur le redémarrage de la séquence, je pense que c'est répondu ici en donc. p> p>
Si vous avez l'intention de garder l'identité la même (ce qui semble être le cas) ce n'est pas une solution.
@Nate: Vous avez manqué où il est écrit "max (id) +1"
Message avec des colonnes peuplées par des séquences Oracle de cette manière semble une mauvaise idée. À Oracle, vous maintenez généralement une colonne peuplée via des séquences avec une gâchette. Si vous commencez à tourner cette fonctionnalité sur et éteindre et que vous réinitialisez la séquence ad lib, vous exécutez le risque d'une séquence non disponible lorsqu'un autre processus en a besoin ou d'être réinitialisé à une valeur qui a été utilisée déjà mais non engagée. p>
Les déclencheurs sont inutiles aussi longtemps que la séquence .nextval code> est utilisée dans toutes les instructions d'insertion pour la table, ce qui ne devrait réellement se produire dans une seule procédure stockée de toute façon.
Déposez les séquences et recréez-les lorsque vous avez terminé avec la valeur max + 1. P>
en supposant que cela soit un ETL de 1 fois
Ceci invalide le code qui dépend de cette séquence et dépasse également tous les privilèges du processus. Si ce n'est pas un problème, c'est l'option la plus simple.