Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1124 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle] Problème trigger auto increment

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Oracle] Problème trigger auto increment

n°1763602
krovomi
Posté le 23-07-2008 à 11:01:46  profilanswer
 

Bonjour,
 
J'ai crée un trigger et une séquence pour faire un auto-increment sous Oracle mais il me pose un problème :
 
Séquence :
 

Code :
  1. CREATE SEQUENCE s_inc_port_tom4 START WITH 1 INCREMENT BY 1;


 
Trigger :  

Code :
  1. CREATE OR REPLACE TRIGGER tr_inc_port_tom BEFORE INSERT ON tmp_export_profils_port_tom
  2. FOR EACH ROW
  3. DECLARE
  4. BEGIN
  5. SELECT s_inc_port_tom.nextval INTO :new.tmp_export_profils_port_tom.id_port from DUAL;
  6. END;
  7. /


 
C'est la ligne

Code :
  1. SELECT s_inc_port_tom.nextval INTO :new.tmp_export_profils_port_tom.id_port from DUAL;

qui pose problème, voyez-vous pourquoi ?
 
Merci

mood
Publicité
Posté le 23-07-2008 à 11:01:46  profilanswer
 

n°1763607
slr56
Tout problème a sa solution.
Posté le 23-07-2008 à 11:08:06  profilanswer
 

je ne suis pas certain mais il me semble que pour la séquence, il faut dire qu'elle est la dernière valeur.
de 1 à 1000 par exemple. Quand il sera rendu à 1000 il retournera au départ et cherchera un emplacement vide. Tu peux mettre 50000 si tu veux ;)
 
CREATE SEQUENCE ma_sequence START WITH 1 INCREMENT BY 1 MAXVALUE 50000;


Message édité par slr56 le 23-07-2008 à 11:10:21
n°1763610
krovomi
Posté le 23-07-2008 à 11:08:46  profilanswer
 

C'est bon j'ai trouvé, en fait il ne faut pas mettre la table.nom du champ, mais simplement le nom du champ :
 
Réponse :

Code :
  1. CREATE SEQUENCE s_inc_port_tom START WITH 1 INCREMENT BY 1;
  2. commit;
  3. CREATE OR REPLACE TRIGGER tr_inc_port_tom
  4.    BEFORE INSERT
  5.    ON tmp_export_profils_port_tom
  6.    FOR EACH ROW
  7. BEGIN
  8.    SELECT s_inc_port_tom.NEXTVAL
  9.      INTO :NEW.id_port
  10.      FROM DUAL;
  11. END;
  12. /

Message cité 1 fois
Message édité par krovomi le 24-07-2008 à 11:40:40
n°1763612
slr56
Tout problème a sa solution.
Posté le 23-07-2008 à 11:11:47  profilanswer
 

krovomi a écrit :

C'est bon j'ai trouvé, en fait il ne faut pas mettre la table.nom du champ, mais simplement le nom du champ :
 
Réponse :

Code :
  1. CREATE SEQUENCE s_inc_port_tom START WITH 1 INCREMENT BY 1;
  2. commit;
  3. CREATE OR REPLACE TRIGGER tr_inc_port_tom
  4.    BEFORE INSERT
  5.    ON tmp_export_profils_port_tom
  6.    FOR EACH ROW
  7. BEGIN
  8.    SELECT tr_inc_port_tom.NEXTVAL
  9.      INTO :NEW.id_port
  10.      FROM DUAL;
  11. END;
  12. /



 
 
ok. C'est bon à savoir.
 
Pour le post que j'ai mis précédemment, je me suis trompé car je viens de faire une rechercher à l'instant et on est pas obligé de donner une limite à la séquence.

n°1763622
krovomi
Posté le 23-07-2008 à 11:19:09  profilanswer
 

ouais je confirme tu n'es pas obligé.
 
A+

n°1763636
krovomi
Posté le 23-07-2008 à 11:41:19  profilanswer
 

Une autre question :
 
J'ai une table tmp_export_profils_portrait et une table tmp_export_profils_port_tom, elles ont la même structure, sauf que la première contrairement à la seconde n'a pas de champ id_port (champ auto_increment).
Avec le trigger crée au dessus, quand je fais :
 

Code :
  1. INSERT INTO tmp_export_profils_port_tom SELECT
  2.                                                company,
  3.                                                sub_unit,
  4.                                                name_prefix,
  5.                                                first_name,
  6.                                                last_name,
  7.                                                email_work,
  8.                                                cfa,
  9.                                                pin_number,
  10.                                                name_suffix,
  11.                                                dob,
  12.                                                verified_flag,
  13.                                                work_phone,
  14.                                                start_travel_date,
  15.                                                end_travel_date,
  16.                                                home_appart_code,
  17.                                                home_city_code,
  18.                                                pin_mailer_sent,
  19.                                                is_arranger_flag,
  20.                                                external_system_identifier,
  21.                                                bus_traveler_rollup_type_desc,
  22.                                                arranger_first_name,
  23.                                                arranger_last_name,
  24.                                                arranger_phone,
  25.                                                email_type,
  26.                                                arranger_email,
  27.                                                receive_e_invoice_flag,
  28.                                                client_defined_trvlr_type_name,
  29.                                                traveler_type_name,
  30.                                                privacy_option_acceptance_flag,
  31.                                                client_org_unit_id FROM tmp_export_profils_portrait;
  32. commit;


 
J'ai l'erreur ORA-00947 : Not enough values, donc je voudrais savoir pourquoi il me sort cette erreur alors que normalement il devrait simplement faire un copier/coller de la table tmp_export_profils_portrait dans tmp_export_profils_port_tom en mettant le champ tmp_export_profils_port_tom.id_port en auto-increment, non ?
 
Soit j'ai zappé un truc, soit je ne comprends pas le principe, quelqu'un pourrait m'expliquer ?
 
Merci


Message édité par krovomi le 23-07-2008 à 14:17:25
n°1763704
krovomi
Posté le 23-07-2008 à 14:17:49  profilanswer
 

UP !!!

n°1764156
krovomi
Posté le 24-07-2008 à 11:41:00  profilanswer
 
n°1764198
MagicBuzz
Posté le 24-07-2008 à 13:27:55  profilanswer
 

insert into <table> (<fieldlist> ) select ...
 
et y'a plus de problème
 
et c'est l'unique syntaxe qu'il faut utiliser
 
si tu n'énumères pas les champs manuellement dans ton insert, c'est comme le "*" dans les select, t'es mort au bout de deux jours d'utilisation de ton application
 
et à noter que si tu mets un trigger sur ton champ auto-incrément, tu peux shooter la clause "not null" de la définition de la table, ça devrait te permettre d'éviter les ignominies que je vois dans le lien que tu as posté


Message édité par MagicBuzz le 24-07-2008 à 13:30:42

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle] Problème trigger auto increment

 

Sujets relatifs
Probleme : lancer une appli java en commande shell overflow auto et IE6 : débordement de div
probleme de connexion avec ma base oracleprobleme CSS
Problème : Requetes SQL Serveur liés à Access[Oracle] Jointures
problème float et lien hypertexte IE6Probleme sur VBA
Problème </map> RESOLU 
Plus de sujets relatifs à : [Oracle] Problème trigger auto increment


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR