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 left join oracle 10g


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 139
    Par défaut update left join oracle 10g
    bonjour,

    voilà ma requête sous sql server
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    update [dbo].[TIERS_TIE]
    set TIERS_TIE.TIE_ID_SUPERIEUR = tie_centre.tie_id
    FROM [dbo].[TIERS_TIE] as tie_agence
    left join (	select tie_id, tie_nom, tie_code_tiers, tie_code_secteur
    			FROM [dbo].[TIERS_TIE]
    			where isnull(TIE_CENTRE_STOCKAGE,0) = 1) as tie_centre
    on tie_centre.tie_code_secteur = left(tie_agence.tie_code_tiers,1)
    where isnull(tie_agence.tie_agence,0) = 1
    j'essaye de la transformer sous oracle avec cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    update TIERS_TIE
    set TIERS_TIE.TIE_ID_SUPERIEUR = tie_centre.tie_id
    FROM TIERS_TIE tie_agence
    left join (select tie_id, tie_nom, tie_code_tiers, tie_code_secteur
    			FROM TIERS_TIE
    			where nvl(TIE_CENTRE_STOCKAGE,0) = 1) tie_centre
    on tie_centre.tie_code_secteur = substr(tie_agence.tie_code_tiers,0,1)
    where nvl(tie_agence.tie_agence,0) = 1
    mais j'obtiens toujours l'erreur:
    ORA-00933: la commande SQL ne se termine pas correctement

    Je n'arrive vraiment pas à la corriger

    Merci d'avance pouur votre compréhension

  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
    Votre première requête SQL Server ?
    J'en doute, pas de nvl() en SQL Server : la fonction s'appelle isnull().

    Soit dit en passant vos nvl ne servent à rien à part ralentir la requête.
    "nvl(tie_agence.tie_agence,0) = 1" est complètement équivalent à "tie_agence.tie_agence = 1"

    Qu'essayez-vous de faire exactement ?

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 139
    Par défaut
    j'avais copié deux fois la même requête

    Par contre je ne comprends pas l'erreur que ça me fait:

    update TIERS_TIE
    set TIERS_TIE.TIE_ID_SUPERIEUR = tie_secteur.tie_id
    FROM TIERS_TIE tie_inseminateur
    left join ( select tie_id, tie_nom, tie_code_tiers, tie_code_secteur
    FROM TIERS_TIE
    where nvl(tie_secteur,0) = 1) tie_secteur
    on tie_secteur.tie_code_secteur = tie_inseminateur.tie_code_secteur
    where nvl(tie_inseminateur.TIE_INSEMINATEUR,0) = 1
    Erreur à la ligne de commande : 2, colonne : 50
    Rapport d'erreur :
    Erreur SQL : ORA-00933: la commande SQL ne se termine pas correctement
    00933. 00000 - "SQL command not properly ended"
    *Cause:
    *Action:

    à vrai dire, on m'a demandé de traduire la requête qui était en sql server vers oracle, cette requête utilise 2 fois la même table pour faire des mises à jour en ayant un tie_inseminateur.TIE_INSEMINATEUR à 1 et il y a un left join je ne sais pas si sur oracle ça ne pose pas problème

  4. #4
    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
    Essayez ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    UPDATE (
        SELECT ag.tie_id_superieur, ce.tie_id
        FROM TIERS_TIE ag
        LEFT JOIN (SELECT tie_id, tie_nom, tie_code_tiers, tie_code_secteur
                   FROM TIERS_TIE
                   WHERE TIE_CENTRE_STOCKAGE = 1) ce
          ON ce.tie_code_secteur = substr(ag.tie_code_tiers,1,1)
    WHERE ag.tie_agence = 1
           )
    SET tie_id_superieur = tie_id

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 139
    Par défaut
    Merci beaucoup pour votre aide

  6. #6
    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
    On doit même pouvoir faire plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    UPDATE (
        SELECT
            ag.tie_id_superieur,
            ce.tie_id
        FROM
            TIERS_TIE ag
            LEFT OUTER JOIN TIERS_TIE ce
              ON ce.tie_code_secteur = substr(ag.tie_code_tiers,1,1)
             AND ce.tie_centre_stockage = 1
        WHERE
            ag.tie_agence = 1
           )
    SET tie_id_superieur = tie_id
    Attention, le premier caractère c'est le caractère 1, pas 0.

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

Discussions similaires

  1. update + left join + oracle
    Par zorro13 dans le forum SQL
    Réponses: 3
    Dernier message: 25/11/2011, 17h13
  2. Oracle 8i Syntaxe : Probleme de LEFT JOIN
    Par KaryBoo dans le forum Oracle
    Réponses: 3
    Dernier message: 18/10/2006, 14h12
  3. [Oracle 10g]probleme avec une CONSTRAINT sur UPDATE
    Par Battosaiii dans le forum Langage SQL
    Réponses: 5
    Dernier message: 17/04/2006, 19h05
  4. LEFT JOIN sous Oracle 8i
    Par alexadvance dans le forum Oracle
    Réponses: 11
    Dernier message: 02/11/2005, 11h21
  5. LEFT JOIN avec Oracle 8i ne va pas... doit utiliser (+)
    Par loikiloik dans le forum Langage SQL
    Réponses: 10
    Dernier message: 21/04/2004, 16h38

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