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

DB2 Discussion :

Update ne fonctionne pas


Sujet :

DB2

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    janvier 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : janvier 2008
    Messages : 240
    Points : 210
    Points
    210
    Par défaut Update ne fonctionne pas
    Je suis habitué à MS SQL Server mais pas du tout en DB2/400.

    Je dois faire une requête permettant de formatter correctement des adresses. Exemple : "R DU POMMIER" doit devenirr "RUE DU POMMIER"

    J'ai un SELECT de ce genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT	MauvaiseAdresse, INSERT(MauvaiseAdresse,1,1,'RUE') as BonneAdresse
    FROM	MaTable
    WHERE	MauvaiseAdresse LIKE 'R %'
    J'ai bien le résultat espéré dans BonneAdresse

    Si je fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE MaTable
    SET MauvaiseAdresse = INSERT(MauvaiseAdresse,1,1,'RUE')
    WHERE	MauvaiseAdresse LIKE 'R %'
    Ca ne marche pas. J'obtient : Message: [SQL0362] Le marquage a détecté une erreur dans l'instruction SQL actuelle. Cause . . . . . : Syntaxe de l'instruction SQL non conforme à la norme à la position 37. Que faire . . . : Consultez les messages antérieurs dans l'historique du travail pour une description plus complète de l'erreur. Si la conformité à la norme est nécessaire, modifiez l'instruction en conséquence et renouvelez la demande.

    Merci pour votre aide.

  2. #2
    Membre éclairé

    Profil pro
    Technicien
    Inscrit en
    février 2009
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : février 2009
    Messages : 338
    Points : 815
    Points
    815
    Par défaut
    Bonjour,

    Il faudrait essayer la syntaxe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE MaTable
    SET MauvaiseAdresse = 'RUE' | RIGHT(MauvaiseAdresse, LENGTH(MauvaiseAdresse)-1)
    WHERE	MauvaiseAdresse LIKE 'R %'
    Quelques précisions (qui ne sont peut être pas nécessaire) :
    • Le | permet de concatener les 2 chaines de caractères 'RUE' et RIGHT...
    • La méthode RIGHT(MauvaiseAdresse, LENGTH(MauvaiseAdresse)-1) permet d'obtenir la chaine MauvaiseAdresse sans le premier caractère 'R'


    ben

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    janvier 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : janvier 2008
    Messages : 240
    Points : 210
    Points
    210
    Par défaut
    çà ne marche pas.

    le | n'est pas accepté au niveau de la syntaxe.

    J'ai essayé l'alternative suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONCAT('RUE',RIGHT(MauvaiseAdresse,LENGTH(PBADDR)-1))
    qui fonctionne très bien dans un SELECT qui me pousse dans les orties dès que je l'utilise dans une instruction UPDATE.

    Notre version de l'AS/400 est V6/R1

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2002
    Messages : 3 173
    Points : 5 337
    Points
    5 337
    Par défaut
    Bonjour,

    C'est quoi votre OS ?

    Sinon pourriez vous mettre la requête avec le concat qui plante + le code sql d'erreur svp ?

  5. #5
    Membre chevronné Avatar de bernard59139
    Profil pro
    Administrateur de base de données
    Inscrit en
    octobre 2006
    Messages
    939
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : octobre 2006
    Messages : 939
    Points : 2 028
    Points
    2 028
    Par défaut
    Bonjour

    attention aux format de colonne et aux données.

    si la colonne est en CHAR, la dernière requête donne une chaine à insérer trop longue de 2 caractères.

    La sqlcode est très utile pour debug.

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2002
    Messages : 3 173
    Points : 5 337
    Points
    5 337
    Par défaut
    En v5R4 votre synthax initial marche très bien.

    Sinon le concat c'est le double pipe qui le remplace.

    Votre requête est-elle tel quel ? car la position 37 renvoie nul part de précis.
    sur quel mot sql le moteur bloque en fait ?

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    janvier 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : janvier 2008
    Messages : 240
    Points : 210
    Points
    210
    Par défaut
    La dernière version de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE	BIDONCHA.SPTML0
    SET	PBADDR = CONCAT('RUE',RIGHT(PBADDR,LENGTH(PBADDR)-1))
    WHERE	PBADDR LIKE 'R %'
    SQL1241: Marquage ANS - Ecart de syntaxe. Code RIGHT incorrect. Codes précédents : 'RUE' et ,.
    SQL0362: Le marquage a détecté une erreur dans l'instruction SQL actuelle.

    SQL State: 0168I
    Vendor Code: 362
    Message: [SQL0362] Le marquage a détecté une erreur dans l'instruction SQL actuelle. Cause . . . . . : Syntaxe de l'instruction SQL non conforme à la norme à la position 50. Que faire . . . : Consultez les messages antérieurs dans l'historique du travail pour une description plus complète de l'erreur. Si la conformité à la norme est nécessaire, modifiez l'instruction en conséquence et renouvelez la demande.

    0 rows were affected by the statement

    Statement ran successfully, with warnings (0 ms)

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2002
    Messages : 3 173
    Points : 5 337
    Points
    5 337
    Par défaut
    En dehors de la remarque pertinente de bernard59139, comment lancez-vous cette requête ?

    Je viens de tester votre syntaxe en v6R1 via un STRSQL ca marche bien.

    Sinon, essayez de mettre un espace après vos virgule, j'ai déjà eu ce problème quand je lançais une requête via un CL (mais bon je ne penses pas que ce soit ca ..)

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2004
    Messages : 1 298
    Points : 1 550
    Points
    1 550
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    SET	PBADDR = 'RUE' CONCAT SUBSTR(PBADDR, 2, LENGTH(PBADDR)-1))
    ...
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    SET	PBADDR = CONCAT('RUE', substr(PBADDR, 2, length(PBADDR) -1))
    ...
    Pour raisons de portabilité et de CCSID, éviter les raccourcis du genre |, !, etc. Toujours coder en clair. Par exemple, écrire en toutes lettres CONCAT et pas ! .

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    janvier 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : janvier 2008
    Messages : 240
    Points : 210
    Points
    210
    Par défaut
    Et bien, il s'agissait tout simplement d'un problème de service pack !.
    Dès qule le service pack a été installé, tout est passé comme une lettre à la poste (et comme je m'occupe de formattage d'adresse...)

    Merci à tous pour l'aide fournie. J'en ai ainsi appris un peu plus sur DB2.

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

Discussions similaires

  1. [MySQL] Update ne fonctionnant pas à la première exécution
    Par isa150183 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 10/11/2006, 19h25
  2. Chaîne SQL update ne fonctionne pas (faut-il l'imbriquer ?"
    Par beegees dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/10/2006, 12h22
  3. UPDATE ne fonctionne pas ?
    Par crocodile dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 18/07/2006, 17h50
  4. Requete UPDATE ne fonctionnant pas
    Par Yanmeunier dans le forum Access
    Réponses: 3
    Dernier message: 12/04/2006, 18h19
  5. Microsoft Update ne fonctionne pas sous Win 2000 SP4
    Par botakelymg dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 03/10/2005, 06h32

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