2009-08-23 8 views
0

Je me demandais s'il y avait un moyen de créer une séquence nextval pour une valeur varchar? J'utilise iSQL plus, oracle. Par exemple. J'ai une table des ventes qui se compose de sale_id, prod_id, cust_name, sale_name. où insérer les données en procédant comme suit:séquence nextval pour varchar en sql?

insert into sales 
select sale_id_seq.nextval, 
trunc(dbms_random.value(1,100)), 
(code for assigning random string for sale_name) 
cust_id 
from customer; 

Répondre

1

Votre question n'a pas de sens. Que serait un NEXTVAL pour un varchar?

Si vous voulez stocker un nombre dans la colonne varchar vous pouvez mais vous ne devriez pas. Il est toujours préférable de conserver les nombres dans des colonnes numériques. Si vous souhaitez générer un flux de A, B, C ... Z, AA, AB ... AZ, AAA, vous pouvez écrire une fonction qui prend une séquence régulière et la convertit en base 26 (ou 36 si vous voulez passer à 1,2 ...9, A, B ... Z, 10, 11 ... 1A). Mais c'est beaucoup d'effort pour quelque chose sans bénéfice évident.

Si vous voulez une série plus sophistiquée comme 2009/00000001, 2009/00000002, etc., cela peut être fait en utilisant ce qu'on appelle une table de contrôle de code. C'est une table artisanale qui contient la dernière valeur assignée. Encore une fois, vous aurez besoin d'un code sur mesure pour générer la prochaine valeur. Cette approche comporte de sérieuses limitations, notamment la sérialisation de vos insertions: votre code doit émettre un verrou sur la table, de sorte qu'un deuxième utilisateur ne peut insérer un enregistrement dans CUSTOMER tant que le premier utilisateur n'a pas émis de validation (ou rollback).

modifier

Je ne comprends pas pourquoi vous dites DBMS_RANDOM ne fonctionne pas. Il fait clairement:

SQL> select dbms_random.string('U', 5) 
    2 from dual 
    3/

DBMS_RANDOM.STRING('U',5) 
-------------------------------------------------------- 

IROGT 

SQL> 
+0

je n'étais pas sûr de savoir comment il mot. Je ne parle pas de nextval, mais de la version varchar de nextval. Parce que j'ai essayé d'utiliser dbms_random.string ('U', 5); mais ça n'a pas marché. – taksIV

Questions connexes