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

PL/SQL Oracle Discussion :

insert dynamique avec :new


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 190
    Par défaut insert dynamique avec :new
    salut
    je travail dans un trigger et je select des noms des champs dans une une autre table et je veux inserrer dans une table en concatinant les noms des champs puis la partie values là ou j'ai trouver le pb
    je dois concatiner les noms des champs dynamiques avec ':new.' et dans l'insert dynamique ne comprend pas (execute immediate)
    je travail avec oracle Database 10g Enterprise Edition Release 10.2.0.1.0
    voila une partie du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    for c in(select distinct nom_col from critere_regime_trav 
              union
              select distinct nom_col from critere_conge
              union
              select distinct nom_col from critere_cycle_conge) loop
              chaine_pers := chaine_pers||','||c.nom_col;
              values_chaine :=  values_chaine||','||':new.'||c.nom_col;
              end loop;
              chaine_pers := rtrim(chaine_pers,',');
              values_chaine := rtrim(values_chaine,',');
     
    execute immediate 'insert into pers_trig('||chaine_pers||') values('||values_chaine||')''';
    merci pour votre aide

  2. #2
    Membre chevronné Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Par défaut
    Ce serait largement mieux de nommer les colonnes.
    D'ailleurs, qu'est-ce qui fait que tu ne le fais pas mais utilise une horreur de code soit-disant dynamique ?

    Nicolas.

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 190
    Par défaut
    salut
    merci pour votre réponse mais je select les noms des colonnes à partir du paramétrage l'utilisateur peut paramétrer ce qu'il veut et je dois gérer ça dynamiquement

  4. #4
    Membre chevronné Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Par défaut
    Et tout ca dans un trigger ? Et bien bon courage, meme si je suis presque sur qu'une meilleure solution est possible.
    Bref, as-tu essayer avec des bind variables ?
    De la forme
    ta_requete := 'insert into table (c1) value (:b1)';
    execute immediate ta_requete using :new.c1;

    Nicolas.

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 190
    Par défaut
    merci encore une fois pour votre réponce mais pour mon cas c1 et une chaine
    dans la quelle je concatine une ensemble des noms de colonnes quelconques pour moi ect ce posssible d'adapter votre logique pour cas pareil si c'est possible ça sera impec
    merci d'avance

  6. #6
    Membre chevronné Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Par défaut
    Desole, je comprends rien a ta problematique. Peut-etre une nouvelle explication ?
    Dans tous les cas, le mieux est de faire l'execute immediate sur une variable contenant la requete a executer, ainsi tu peux utiliser dbms_output.put(var) pour voir la syntaxe de ta requete.
    Enfin, le :new n'est valide que pour les colonnes de la table sur laquelle le trigger a ete cree.

    Nicolas.

  7. #7
    Membre chevronné Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Par défaut
    J'ajouterais : ta table pers_trig n'a pas plus de 1000 colonnes, ta table source non plus (celle du trigger), alors rien n'empeche d'ecrire ton insert "en dur" (il n'y pas de mal a cela) :
    insert into pers_trig (c1,c2,c3,...c1000) values (:new.c1,:new.c2,:new.c3,...,:new.c1000);

    Nicolas.

Discussions similaires

  1. [UI] Insertion dynamique Datepicker avec un bouton
    Par tonycemalin dans le forum jQuery
    Réponses: 20
    Dernier message: 27/07/2012, 11h44
  2. Insertion dynamique d'images dans crystal report avec c# 3.5
    Par devvanjier dans le forum Windows Forms
    Réponses: 0
    Dernier message: 08/12/2009, 18h35
  3. INSERT dynamique avec mise à jour du Resultset
    Par Titounet007 dans le forum JDBC
    Réponses: 2
    Dernier message: 16/10/2009, 11h43
  4. Image dynamique avec insertion d'un compteur aléatoire
    Par maitaddi dans le forum Imagerie
    Réponses: 1
    Dernier message: 11/09/2009, 11h07
  5. comment creer un alias dynamique avec BDE et ODBC
    Par david33 dans le forum C++Builder
    Réponses: 2
    Dernier message: 12/07/2002, 11h50

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