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 Oracle Discussion :

Update d'une colonne sans passer par un select


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2014
    Messages : 53
    Par défaut Update d'une colonne sans passer par un select
    Bonjour à tous!

    Je souhaiterais faire un update d'une colonne et remplacer la valeur par un message : chaîne de caractères par conséquent, je n'ai pas besoin d'un select.
    Je travaille sur PL/SQL et je ne connais pas très bien la syntaxe, est-ce quelqu'un pourrait m'aider?

    J'ai fait quelque chose qui ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    update comments_analysis c
       set TEXT = 'Attention, certaines dates migrées de SYFACT peuvent être au format américain (MM/JJ/AAAA).'
      from REF_TYPE_ANALYSIS,  FILES
     where FILE_TYPE = 'PDS' OR FILE_TYPE = 'DA'
       and REF_ID = '10';
    J'ai rajouté le FROM car on ne peut pas faire table.colonne apparement.
    On m'a conseillé un exemple comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    update sus_tracfin_acknowledgment sta
       set dt_acknowledgment = (select ts2.dt_report_date
                                  from TRACFIN_SNAPSHOT ts2
                                 where ts2.tracfin_snapshot_id = sta.tracfin_snapshot_id);
    Mais comment je rajoute ma chaîne de caractères ?

    Merci d'avance.

  2. #2
    Membre éclairé Avatar de macben
    Inscrit en
    Mars 2004
    Messages
    546
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2004
    Messages : 546
    Par défaut
    Bonjour,

    J'ai beau me frotter les yeux et relire j'avoue ne pas comprendre exactement ce que tu veux faire. Veux-tu que le texte mis dans TEXT soit statique ou provienne d'une autre colonne ?

    Pourquoi veux-tu joindre avec REF_TYPE_ANALYSIS et FILES ? Pour restreindre les lignes de comments_analysis à mettre à jour ?

    Peux-tu nous donner les liens qui existe entre les tables comments_analysis c, REF_TYPE_ANALYSIS et FILES ?

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 599
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    La syntaxe n'est pas bonne, voir ici : http://docs.oracle.com/javadb/10.8.3...sqlj26498.html

    Attention aussi aux combinaisons AND/OR sans parenthèses, c'est toujours dangereux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    where FILE_TYPE = 'PDS' OR FILE_TYPE = 'DA'
       and REF_ID = '10';

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2014
    Messages : 53
    Par défaut Précision sur la requête
    Bonjour,

    Macben, je veux effectivement que le champs TEXT soit statique et ne provienne pas d'une autre colonne, c'est une chaîne de caractères que je veux rajouter.
    Table FILES a une PK REF_ID --> relié à Table FILE_ANALYSIS FK REF_ID

    Ma table Comment_analysis n'a à priori pas de PK ou de FK qui peuvent se relier aux deux tables précédentes, il n'y a qu'une colonne "Parent_ID" qui a l'air de correpondre à la colonne FILE_Analysis_ID (PK)de la table FILE_ANALYSIS mais la colonne PARENT_ID n'est pas une FK!

    En gros, je veux modifier la colonne TEXT de ma table Comment_analysis et la seule colonne qui fait un lien entre ma table FILES et FILE_Analysis est Parent_ID qui n'est pas une clé.

    J'aimerai faire un update, une concaténation et des jointures (car la modification doit se faire selon des conditions) tout ça dans la même requête.

    En gros mon algo est :
    Mettre à jour la colonne TEXT de COMMENTS_ANALYSIS avec le message suivant "XXX" quand la colonne FILES_TYPE de FILE est égal à PDS ou à DA et quand La colonne REF_ID de REF_TYPE_ANALYSIS est égal à 10.

    Merci estcartefigue pour ta remarque.

    Merci de votre aide.

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    L'update se fait comme un SELECT avec un FROM sur une seule table.

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    update comments_analysis c
       set TEXT = 'Attention, certaines dates migrées de SYFACT peuvent être au format américain (MM/JJ/AAAA).'
    WHERE EXISTS (select 1 from  REF_TYPE_ANALYSIS a where a.xxxx = c.pk);
    Afin de tester ce que cela va faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     select c.colonnes, 'Attention, certaines dates migrées de SYFACT peuvent être au format américain (MM/JJ/AAAA).'
    FROM comments_analysis c
      WHERE EXISTS (select 1 from  REF_TYPE_ANALYSIS a where a.xxxx = c.pk);
    Le 'Attention, certaines dates migrées de SYFACT peuvent être au format américain (MM/JJ/AAAA).' peut être remplacé par un "(select ... from ...)" si tu souhaites faire une mise à jour dynamique.
    Pour ton second exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select tracfin_snapshot_id, dt_acknowledgment, (select ts2.dt_report_date
                                  from TRACFIN_SNAPSHOT ts2
                                 where ts2.tracfin_snapshot_id = sta.tracfin_snapshot_id) new_dt_acknowledgment
    from sus_tracfin_acknowledgment sta

    Normalement, tu devrais toujours faire le SELECT quand tu prépares ta requête update afin de vérifier les lignes que tu vas modifier, et la donnée que tu vas mettre à jour.
    Ceci afin de vérifier que tu n'as pas oublié une jointure quelque part, et que la nouvelle donnée est bien celle que tu souhaites.

    Tu verras que ton second exemple tu passes un update sur toutes les lignes de sus_tracfin_acknowledgment, même si aucune ligne dans TRACFIN_SNAPSHOT.

Discussions similaires

  1. Réponses: 7
    Dernier message: 28/03/2007, 13h57
  2. comment executer une requete sans passer par le recordset ?
    Par php4life dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 13/12/2006, 20h57
  3. Envoyer une télécopie sans passer par l'assistant de télécopie
    Par therouxy dans le forum Composants VCL
    Réponses: 5
    Dernier message: 09/10/2006, 11h05
  4. Réponses: 5
    Dernier message: 13/04/2006, 22h54
  5. Afficher une image sans passer par les textures
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/05/2003, 19h13

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