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 :

0 rows merged


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    Par défaut 0 rows merged
    Quand j'exécute mon script c'est l'output que je reçois...
    voilà mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    MERGE INTO FILE_SYS_JBW fsj
    USING
      (SELECT FS_ID FROM FILE_SYS_JBW) tmp
    ON (fsj.FS_ID = tmp.FS_ID)
      WHEN MATCHED THEN
        UPDATE SET fsj.FS_MAX_SIZE   = ${FS_MAX_SIZE},
                   fsj.FS_SPACE_UTIL = ${FS_SPACE_UTIL},
                   fsj.FS_DIRNAME    = '${FS_DIRNAME}',
                   fsj.FS_DEVNAME    = '${FS_DEVNAME}'
      WHEN NOT MATCHED THEN
        INSERT
          (fsj.FS_ID, fsj.FS_DEVNO , fsj.FS_DEVNAME, fsj.FS_DIRNAME, fsj.FS_MAX_SIZE, fsj.FS_SPACE_UTIL)
        VALUES
          ('${FS_ID}', ${FS_DEVNO}, '${FS_DEVNAME}', '${FS_DIRNAME}', ${FS_MAX_SIZE}, ${FS_SPACE_UTIL})
    ;
    Est-ce que quelqu'un a une idée ??

    Jean-Bernard

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Que représentent tous ces $ ?

  3. #3
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Que représentent tous ces $ ?

    des variables
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    C'est plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    MERGE INTO FILE_SYS_JBW fsj
    USING
      (SELECT FS_ID,
              ${FS_MAX_SIZE} as fs_size_max,
              ${FS_SPACE_UTIL} as fs_space_util,
              '${FS_DIRNAME}' as fs_dirname, 
              '${FS_DEVNAME}' as fs_devname,
              ${FS_DEVNO as fs_devno
         FROM FILE_SYS_JBW) tmp
    ON (fsj.FS_ID = tmp.FS_ID)
      WHEN MATCHED THEN
        UPDATE SET fsj.FS_MAX_SIZE   = tmp.fs_size_max,
                   fsj.FS_SPACE_UTIL = tmp.fs_space_util,
                   fsj.FS_DIRNAME    = tmp.fs_dirname,
                   fsj.FS_DEVNAME    = tmp.fs_devname
      WHEN NOT MATCHED THEN
        INSERT
          (fsj.FS_ID, fsj.FS_DEVNO , fsj.FS_DEVNAME, fsj.FS_DIRNAME, fsj.FS_MAX_SIZE, fsj.FS_SPACE_UTIL)
        VALUES
          (tmp.FS_ID, tmp.fs_devno, tmp.fs_devname, tmp.fs_dirname, tmp.fs_size_max, tmp.fs_space_util)
    ;

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Vu que vous mergez les informations de d'une table dans la même table en effectuant la jointure sur le même ID, au final ce sera toujours un UPDATE non ?

    Si je ne me trompe pas ça donnera la même chose que ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE FILE_SYS_JBW
       SET FS_MAX_SIZE   = ${FS_MAX_SIZE}  ,
           FS_SPACE_UTIL = ${FS_SPACE_UTIL},
           FS_DIRNAME    = '${FS_DIRNAME}' ,
           FS_DEVNAME    = '${FS_DEVNAME}'
     WHERE FS_ID         = '${FS_ID}';

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Vu que vous mergez les informations de d'une table dans la même table en effectuant la jointure sur le même ID, au final ce sera toujours un UPDATE non ?
    Non, en fait, je pars d'une table vide, donc je veux pouvoir la remplir, d'où le besoin de MERGE.

    Quand FS_ID (qui est la PK) n'existe pas dans la table, je veux faire un INSERT des valeurs que je récupère via mon script, si cette valeur existe, je veux faire un UPDATE.

    Sauf si en utilisant UPDATE on peut automatiquement faire les deux (ce qui me semble utopique...)

    Jean-Bernard

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Que représentent tous ces $ ?
    En fait, j'exécute cette requète dans un script ksh.
    Malheureusement, impossible de faire ce que je veux.
    Ma table est vide et je souhaite la remplir, mais il ne se passe rien...
    Des idéees ?

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Ah la table est vide. En rempartant du code de mnitu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     MERGE INTO FILE_SYS_JBW fsj
     USING (SELECT '${FS_ID}'       AS fs_id        ,
                   ${FS_MAX_SIZE}   AS fs_size_max  ,
                   ${FS_SPACE_UTIL} AS fs_space_util,
                   '${FS_DIRNAME}'  AS fs_dirname   , 
                   '${FS_DEVNAME}'  AS fs_devname   ,
                   ${FS_DEVNO}      AS fs_devno
              FROM DUAL) tmp
        ON (fsj.FS_ID = tmp.FS_ID)
      WHEN MATCHED THEN UPDATE
       SET fsj.fs_max_size   = tmp.fs_size_max,
           fsj.fs_space_util = tmp.fs_space_util,
           fsj.fs_dirname    = tmp.fs_dirname,
           fsj.fs_devname    = tmp.fs_devname
      WHEN NOT MATCHED THEN 
    INSERT (fsj.fs_id, fsj.fs_devno, fsj.fs_devname, fsj.fs_dirname, fsj.fs_max_size, fsj.fs_space_util)
    VALUES (tmp.FS_ID, tmp.fs_devno, tmp.fs_devname, tmp.fs_dirname, tmp.fs_size_max, tmp.fs_space_util);

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Ah la table est vide. En rempartant du code de mnitu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    MERGE INTO FILE_SYS_JBW fsj
     USING (SELECT '${FS_ID}'       AS fs_id        ,
                   ${FS_MAX_SIZE}   AS fs_size_max  ,
                   ${FS_SPACE_UTIL} AS fs_space_util,
                   '${FS_DIRNAME}'  AS fs_dirname   , 
                   '${FS_DEVNAME}'  AS fs_devname   ,
                   ${FS_DEVNO}      AS fs_devno
              FROM DUAL) tmp
    ça marche ! Merci !!!
    Par contre, j'aimerai comprendre pourquoi...
    J'ai l'impression, que c'est le fait d'avoir utilisé qui a permis à ma requête de fonctionner, mais pourquoi ?

    Jean-Bernard

  10. #10
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Votre table étant vide, votre select initial :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT FS_ID FROM FILE_SYS_JBW
    ne retournait rien.

    Donc il n'y avait rien à fusionner !

    Dès que vous travaillez avec des constantes / variables / valeurs système, bref tout ce qui ne dépend pas d'une table, il faut utiliser DUAL. Ça permet à ces valeurs d'exister lors d'un SELECT.

  11. #11
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par jeanbernard.weck Voir le message
    ...Ma table est vide et je souhaite la remplir, mais il ne se passe rien...
    Après coup, je me suit dit qu'en fait 0 rows merged signifie que le select de départ ne ramène rien.

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

Discussions similaires

  1. Oracle 7 -> Oracle 8 : "Invalid Row Id"
    Par gmartintin dans le forum Bases de données
    Réponses: 4
    Dernier message: 20/10/2004, 11h39
  2. Shell - Merge de fichiers
    Par tesla dans le forum Linux
    Réponses: 4
    Dernier message: 29/06/2004, 02h10
  3. Mutiple row in singleton select ????? [Important, merci]
    Par SkyDev dans le forum Bases de données
    Réponses: 6
    Dernier message: 20/04/2004, 14h02
  4. Delete dans la propriété Rows d'un TStringGrid ???
    Par Neilos dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/02/2004, 23h55
  5. Row lock
    Par cassandra dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 09/04/2003, 16h07

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