10
votes

Quelle commande remplacerait l'insertion d'identité marche / arrêt de SQLServer à Oracle?

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


0 commentaires

3 Réponses :


7
votes

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 xxx

vous utilisez xxx < / Pré>

Quant à votre deuxième question sur le redémarrage de la séquence, je pense que c'est répondu ici en donc.


2 commentaires

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"



1
votes

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.


1 commentaires

Les déclencheurs sont inutiles aussi longtemps que la séquence .nextval 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.



0
votes

Déposez les séquences et recréez-les lorsque vous avez terminé avec la valeur max + 1.


2 commentaires

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.