IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL*Loader Oracle Discussion :

SQL loader sequence et trigger


Sujet :

SQL*Loader Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Points : 32
    Points
    32
    Par défaut SQL loader sequence et trigger
    Bonjour tout le monde,
    excusez moi d'avance si ce problème a déjà été traité mais je n'ai pas réussi à comprendre les choses suivantes:
    j'utilise sqlldr pour charger un fichier plat dans une table qui possède un champ style machin_id géré par une séquence et un trigger (auto increment) et qui représente ma clé primaire.
    Les champs de mon fichier plat ne sont pas du même ordre que les champs de ma table, du coup je les indique dans mon fichier contrôle. J'utilise aussi l'argument TRAILING NULLCOLS car je ne remplis pas toutes les colonnes de ma table,et ce qui induit entre autres mon problème avec machin_id, car comme c'est ma clé primaire, elle ne peut donc prendre une valeur nulle et le problème, c'est que le trigger ne s'enclenche pas lors du Load Data : pourquoi est ce le cas? (ma séquence et mon trigger sont déjà créés). Donc mon chargement ne se fait pas à cause de l'erreur "de valeur nulle" et l'utilisation manuelle de la séquence de machin_id ne fonctionne pas non plus.
    Comment donc utiliser le trigger lors du load data?
    Merci d'avance pour vos réponses.
    Bonne journée.

  2. #2
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Points : 2 998
    Points
    2 998
    Par défaut
    Bonjour et bienvenue sur le forum !

    Quelques règles quand même à respecter : il faut que tu donne la version des outils que tu utilises.

    Concernant ton problème, est ce que la sequence est utilisée dans le trigger ou est ce que la séquence est utiliser dans le fichier de control de sqlldr ?
    It isn't that they can't see the solution, it's that they can't see the problem.
    Mes Articles et Traductions (Microstrategy, Css et Javascript)
    Si vous souhaitez contribuer à la rubrique BI, contactez-moi ou tout autre membre de l'équipe BI par MP.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Points : 32
    Points
    32
    Par défaut
    Merci pour ta réponse.Oups désolé, c'est vrai que j'ai oublié l'essentiel, en fait j'utilise Oracle 10g avec l'outil sql loader qui est livré avec.
    Si j'ai bien compris la question, donc j'ai créé ma base, la table concernée avec la séquence et le trigger qui l'utilise.
    J'ai d'abord essayé d'utiliser le load data du fichier control en espérant que le trigger interviendrait pour chaque insert ce qui n'a pas été le cas, et ensuite j'ai essayé dans le fichier control d'incrémenter ma séquence manuellement avec nextval, et ca ne marche pas.

  4. #4
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Points : 2 998
    Points
    2 998
    Par défaut
    Les triggers / sequences et sqlldr ne font pas bon menage...
    Ici tu devrais trouvé quelques infos :

    http://www.developpez.net/forums/sho...d.php?t=290094

    ou sinon je t'invite à chercher sur le forum...

    ou sinon je conseille toujours d'utiliser une table temporaire lorsque le traitement du fichier plat est trop lourd (comme ici), mais cela n'engage que moi
    It isn't that they can't see the solution, it's that they can't see the problem.
    Mes Articles et Traductions (Microstrategy, Css et Javascript)
    Si vous souhaitez contribuer à la rubrique BI, contactez-moi ou tout autre membre de l'équipe BI par MP.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Points : 32
    Points
    32
    Par défaut
    en fait j'avais déjà lu ce post, et celui ci aussi:
    http://www.developpez.net/forums/sho...d.php?t=263951
    où tu parlais des trigger lors d'un load data mais en ce qui me concerne mon trigger ne se met pas automatiquement en route, et c'est cela que je trouve bizarre, sinon oui, la solution serait une table temporaire, mais j'aurai bien voulu savoir pourquoi mon trigger ne marche pas lors d'un load data...
    Merci pour ton aide.

  6. #6
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Points : 2 998
    Points
    2 998
    Par défaut
    Donne nous un exemple de ton code, peux être qu'une erreur s'est caché dedans...
    It isn't that they can't see the solution, it's that they can't see the problem.
    Mes Articles et Traductions (Microstrategy, Css et Javascript)
    Si vous souhaitez contribuer à la rubrique BI, contactez-moi ou tout autre membre de l'équipe BI par MP.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Points : 32
    Points
    32
    Par défaut
    donc voici le code pour la table, la sequence et le trigger :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE probe (
    	probe_position_x integer not null,
    	probe_position_y integer not null,
            probe_index integer not null,
    	probe_strandedness varchar2(50),
    	probe_type varchar2(50),
    	probe_name varchar2(500),
    	probe_seq varchar2(1000),
    	probe_id integer CONSTRAINT pk_probe_id PRIMARY KEY);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE SEQUENCE seq_probe_id
    START WITH 1
    MINVALUE 1
    NOCYCLE
    NOCACHE
    ORDER;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    CREATE OR REPLACE TRIGGER trg_probe_id
    BEFORE INSERT
    ON probe
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROW
    BEGIN
    SELECT seq_probe_id.nextval
    INTO :NEW.probe_id
    FROM DUAL;
    END;
    /

    C'est la première fois que je travaille sous Oracle et je n'ai aucune expérience des trigger et sequence, donc j'espère que j'ai pas codé de bêtises lol.

    Et voilà un des fichiers contrôles que j'avais essayé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    LOAD DATA INFILE 'essai'
    TRUNCATE
    INTO TABLE probe 
    FIELDS TERMINATED BY ';'
    TRAILING NULLCOLS
    (probe_position_x,
    probe_position_y,
    probe_index,
    probe_seq,
    probe_strandedness,
    probe_name FILLER,
    probe_type FILLER
    )
    Je pense que FILLER n'est pas utilise vu que j'utilise TRAILING NULLCOLS, de toute façon avec ou sans, c'est le même résultat.

  8. #8
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Points : 2 998
    Points
    2 998
    Par défaut
    Bonjour,
    Je suis un peu chiante, mais a tu aussi un exemple de fichier à charger ?
    It isn't that they can't see the solution, it's that they can't see the problem.
    Mes Articles et Traductions (Microstrategy, Css et Javascript)
    Si vous souhaitez contribuer à la rubrique BI, contactez-moi ou tout autre membre de l'équipe BI par MP.

  9. #9
    Membre averti Avatar de Wurlitzer
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 469
    Points : 408
    Points
    408
    Par défaut
    Comment utilises tu sqlloader. En particulier utilises tu le direct path ?

    Citation Envoyé par Oracle® Database Utilities 10g Release 1 (10.1)
    Direct Loads, Integrity Constraints, and Triggers

    With the conventional path load method, arrays of rows are inserted with standard SQL INSERT statements—integrity constraints and insert triggers are automatically applied. But when you load data with the direct path, SQL*Loader disables some integrity constraints and all database triggers. This section discusses the implications of using direct path loads with respect to these features.
    Sinon as tu tout simplement vérifié si ton trigger se déclenche quand tu fais un INSERT à la main ?

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Points : 32
    Points
    32
    Par défaut Désolé pour la réponse tardive
    Bonjour
    merci pour vos réponses, je reviens tout juste de vacances.
    Donc du coup, je ne sais plus du tout ce que j'avais commencé à faire avec SQLloader, mais pour répondre à la dernière question , le insert "normal" fait fonctionner le trigger, donc pas de souci de ce côté.
    Bon je vais me remettre dans le bain, si je n'y arrive vraiment pas, j'opterai pour un script bash tout simple
    bonne journée à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/10/2006, 15h19
  2. Chargement de fichier par SQL LOADER
    Par davy.g dans le forum SQL*Loader
    Réponses: 17
    Dernier message: 15/11/2004, 13h08
  3. SQL LOADER
    Par velo83 dans le forum SQL*Loader
    Réponses: 2
    Dernier message: 25/10/2004, 08h24
  4. Réponses: 4
    Dernier message: 10/06/2004, 18h05
  5. erreur sql loader et performance
    Par mobisky dans le forum SQL*Loader
    Réponses: 14
    Dernier message: 20/08/2003, 12h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo