La création d'Oracle séquence qui commence par alphanumérique
Je veux créer de la séquence de démarrage avec le caractère inv
et incrémenté de 1
Les valeurs à
INV01
INV02
INV03
etc...
CREATE SEQUENCE invoice_nun
START WITH "INV"
INCREMENT BY 1
OriginalL'auteur Francis John | 2014-11-15
Vous devez vous connecter pour publier un commentaire.
Seulement des valeurs entières séquences peuvent être créées.
De sorte que la déclaration doit être:
Vous pouvez convertir extraites de la valeur à une chaîne et d'ajouter un préfixe approprié.
Vous pouvez créer une fonction pour simuler une séquence de retour approprié de la chaîne de valeurs
vous pouvez maintenant faire
La séquence telle que définie ci-dessus utilise des valeurs par défaut. Ceci est documenté dans le Base de données de Référence du Langage SQL. Il est équivalent à l'énoncé suivant
Vous devez être conscient de ce qui suit:
1) Si une transaction récupère une valeur de séquence et annule alors la valeur de la séquence est perdu. Donc, si vous procédez de la manière suivante:
la facture id
INV00000001
and
INV00000003are inserted in the
facturestable but the invoice id
INV00000002` est perdu, parce que la déclaration qu'elle est extraite a été restaurée2) Si une instance se bloque toutes les séquences qui sont dans le cache de l'instance sont perdus. Dans votre exemple, la valeur par défaut de cache est utilisé qui est de 20. Donc, si le cas se bloque de plus de 20 séquence de valeurs peuvent être perdus. une alter native est d'utiliser le mot-clé
NOCYCLE
si vous créez la séquence, mais cela apportera des performances.3) Si vous êtes sur un RAC système de numéro de séquence ne représentent pas l'ordre d'aller chercher de l'instruction. Donc il est possible que la première instruction récupère l'id
INV00000021
et la deuxième déclaration récupère l'idINV00000001
si la deuxième instruction est exécutée sur une instance différente de la première instruction. C'est parce que l'instance récupéré les 20 premiers numéros de séquences dans son cache et l'autre cas, extraite de la seconde 20 séquences de chiffres dans son cache. La première instruction est exécutée sur l'instance qui a récupéré la deuxième 20 numéros de séquence. Vous pouvez utiliser leORDER
mot-clé afin d'éviter cela, mais cela apportera à nouveau la performance des sanctionsOn peut donc éviter de 2) et 3) pour le prix d'une dégradation des performances, mais il n'y a aucun moyen d'éviter 2).
OriginalL'auteur miracle173
Oracle fournit uniquement des combinaisons de chiffres, mais vous pouvez construire vos identifiants par la conversion d'une chaîne de caractères, par exemple
'INV' || TO_CHAR(invoice_num.NEXTVAL,'fm00')
Vous l'esprit, vous pourriez avoir besoin de plus de 2 chiffres, en fonction du nombre d'enregistrements que vous êtes enceinte.
déclarer l_new_seq varchar2(10); begin select 'INV' en l_new_seq from dual; exécution immédiate "Créer une séquence seq_inv_num commence par' || l_new_seq || 'incrément de 1'; end;
Non, une séquence Oracle génère uniquement des nombres entiers. Si vous voulez quelque chose que vous avez à les enchaîner à autre chose quand après l'appel de nextval.
OriginalL'auteur Jeffrey Kemp