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

Adaptive Server Enterprise Sybase Discussion :

problème avec un alter table suivi d'un update immédiat


Sujet :

Adaptive Server Enterprise Sybase

  1. #1
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Points : 138
    Points
    138
    Par défaut problème avec un alter table suivi d'un update immédiat
    Bonjour,
    Je suis sous sybase 12.5 et il y a une chose que je ne comprends pas. Lorsque j'essaye, après avoir créé ma table t, d'exécuter d'un seul coup (en sélectionnant les 2 lignes et exécutant la requête) le code suivant, cela ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    alter table t add col int null
    update t set col = 10
    Le message d'erreur est:
    Invalid column name 'col'
    car l'alter semble ne pas avoir été déjà exécuté et donc lors de l'update il ne connait pas encore la colonne col.

    Mais dans ce cas, je ne comprends pas pourquoi le code suivant fonctionne lorsqu'il est exécuté de la même manière (en sélectionnant les 2 lignes et exécutant la requête):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    declare @id int
    select @id = 10
    En effet si je fais un select @id, j'ai bien 10. Or je devrais me retrouver dans la même situation, à savoir le declare n'ayant pas encore été traîté et donc obtenir l'erreur :
    Must declare variable '@id'
    Merci donc de bien vouloir m'éclairer sur ce point.
    Cordialement,
    Julien

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    Sybase compile le "batch", càd le jeu de commandes avec de l'exécuter. Donc au moment de la compilation, la colonne n'existe pas encore.

    cf. http://infocenter.sybase.com/help/in...utility210.htm

  3. #3
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Points : 138
    Points
    138
    Par défaut
    Je comprends cela. Mais de la même manière @id n'est pas plus connu au moment où je lui affecte une valeur que l'update ne connaît pas col au moment où il cherche à lui mettre une valeur? Pourquoi cela ne pose donc pas de problème également dans le cas "select @id = 10"?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    Justement ce n'est pas pareil. Il faut différencier une colonne qui va être utilisée lors de la vérification de la syntaxe, de la génération de l'arbre, de l'optimisation et une variable qui n'est qu'un élément de syntaxe TSQL qui est déclarée juste avant l'affectation.

Discussions similaires

  1. Réponses: 6
    Dernier message: 25/05/2011, 12h07
  2. Problème avec un trigger : table mutante
    Par Raiden1234 dans le forum PL/SQL
    Réponses: 8
    Dernier message: 18/12/2008, 15h14
  3. Problème avec mon alter table
    Par gibea00 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/08/2007, 19h02
  4. [SQL]Problème avec jointure de tables
    Par benjisan dans le forum Requêtes et SQL.
    Réponses: 16
    Dernier message: 29/03/2007, 21h43
  5. Réponses: 12
    Dernier message: 25/11/2005, 13h29

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