Réinitialiser Oracle Séquence d'avoir une VALEUR MIN = 1 et nombre de DÉPART à partir de 1
J'ai un problème de réinitialisation Séquence Oracle pour avoir une VALEUR MIN = 1 et à partir du prochain numéro utilisé est de 1.
J'ai suivi à travers la réponse à cette question:
Comment puis-je réinitialiser une séquence dans Oracle?
create or replace procedure reset_seq( p_seq_name in varchar2 ) is
l_val number;
begin
execute immediate
'select ' || p_seq_name || '.nextval from dual' INTO l_val;
execute immediate
'alter sequence ' || p_seq_name || ' increment by -' || l_val ||
' minvalue 0';
execute immediate
'select ' || p_seq_name || '.nextval from dual' INTO l_val;
execute immediate
'alter sequence ' || p_seq_name || ' increment by 1 minvalue 0';
end;
Mais, le problème, c'est le code ci-dessus est la réinitialisation de la séquence avec la valeur min = 0, et la prochaine val être utilisé est de 2.
Est-il possible de définir la min_value = 1, et nextval à 1, après le reset est fait?
J'ai essayé de la définir, mais l'obtention de l'erreur de mentionner environ comme ci-dessous:
La valeur actuelle ne peut pas être supérieur à la Valeur Minimale.
Merci!
Vous devez vous connecter pour publier un commentaire.
Vous pourriez le faire en deux étapes:
La logique est que, vous ne devriez pas décrémenter la séquence de retour à zéro, depuis le minvalue que vous voulez est
1
, donc, la nextval ne peut être inférieur au minval.Par exemple,
Donc, le min_value et increment_by est maintenant réinitialiser à
1
respectivement. Le nextvalue pourrait être 1 seule fois avant de réinitialiser le increment_by à1
de nouveau.Donc, je ne vois pas du tout l'utilisation pratique de ce que vous voulez atteindre. Toutefois, il pourrait être fait comme démontré ci-dessus.
Pour mettre en œuvre la logique ci-dessus dans votre procédure, faire comme suit:
Installation
Modifier votre procédure comme:
Comme je l'ai dit, je ne vois pas du tout l'utilisation pratique de il. Votre nextval est pratiquement utilisable seulement à partir de
2
. Quand il est1
, vous avez besoin de faire un MODIFIER la SÉQUENCE de une fois de plus pour réinitialiser le increment_by retour à1
.