Insérer dans le tableau, de la Séquence.nextval ne fonctionne pas
J'ai 3 tables,
Data_Excel contient le nom, l'adresse, la ville et la source de la personne;
Personne table a le nom et l'ID;
J'ai besoin d'insérer dans person_location l'adresse source, l'adresse, la ville et l'ID...
Je suis l'aide de la requête suivante :
CREATE SEQUENCE seq
START WITH 6571
MINVALUE 6571
INCREMENT BY 1
CACHE 100
INSERT INTO Person (id,Name,source)
Select (seq.nextval),p_name,source
FROM Data_Excel
WHERE P_Name NOT IN
(SELECT name FROM Person)
GROUP BY P_Name,P_Address,P_city,Source
HAVING count(*) < 2;
mais j'obtiens l'erreur suivante.
Je suis l'aide de seq parce que l'ID est la clé primaire de personnes mais ce n'est pas de l'auto incrémentation. J'ai aussi essayé, mais il y a une erreur :
02287. 00000 - "sequence number not allowed here"
*Cause: The specified sequence umber (CURRVAL or NEXTVAL) is inappropriate
here in the statement.
*Action: emove the sequence number.
OriginalL'auteur Mouzzam Hussain | 2013-11-21
Vous devez vous connecter pour publier un commentaire.
Essayez de déplacer la séquence de la requête de regroupement:
quelque chose comme ceci: création de la SÉQUENCE seq (select max(id)+1 personne) MINVALUE (select max(id)+1 personne) INCRÉMENT de 1 CACHE de 100
Je suppose (car je n'ai pas Oracle ici pour vérifier), au lieu de
SELECT seq.nextval, p_name,source FROM
vous pouvez utiliserSELECT ROWNUM + (SELECT MAX(id) FROM Person), p_name,source FROM
. Si cela fonctionne (essayer), alors soyez averti qu'il est une mauvaise pratique car: lorsqu'il est exécuté par plusieurs clients à exactement le même temps, les états peuvent obtenir le mêmeMAX(id)
et de produire des doubles de clés conduisant à une erreur de clé en double.j'ai essayé dans l'instruction select, mais, il retourne qu'une seule fois pour l'e.g pour 6572 pour tous les 3000 lignes dans le résultat, comment puis-je m'assurer que cette requête s'exécute pour chaque ligne?
OriginalL'auteur halfbit