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 :

Problème Alter Table dans DB2


Sujet :

DB2

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 7
    Par défaut Problème Alter Table dans DB2
    Bonjour à tous, j'ai un problème avec une requète après pas de recherche sans réponse je me tourne vers vous. Ma base est une Workgroup Server Edition V8.1 sur un serveur windows 2003. Voici ma requète :

    connect to Ma_Base user Mon_User using Mon_Password@
    BEGIN ATOMIC
    FOR pk_name AS
    SELECT NAME FROM SYSIBM.SYSTABCONST WHERE TBNAME = 'Nom_Ma_Table' AND CONSTRAINTYP = 'F'
    DO
    ALTER TABLE Nom_Ma_Table DROP FOREIGN KEY pk_name.NAME;
    END FOR;
    END@

    Sachant que le caractère de fin d'instruction est @.

    Voici l'erreur retournée :

    ------------------------------ Commandes entrées ------------------------------
    connect to Ma_Base user Mon_User using ********@
    BEGIN ATOMIC
    FOR pk_name AS
    SELECT NAME FROM SYSIBM.SYSTABCONST WHERE TBNAME = 'Nom_Ma_Table' AND CONSTRAINTYP = 'F'
    DO
    ALTER TABLE Nom_Ma_Table DROP FOREIGN KEY pk_name.NAME;
    END FOR;
    END@

    ------------------------------------------------------------------------------
    connect to Ma_Base user Mon_User using

    Informations de connexion à la base de données

    Serveur de base de données = DB2/NT 8.1.0
    ID utilisateur SQL = ******
    Alias local de la base de données = ******


    BEGIN ATOMIC
    FOR pk_name AS
    SELECT NAME FROM SYSIBM.SYSTABCONST WHERE TBNAME = 'Nom_Ma_Table' AND CONSTRAINTYP = 'F'
    DO
    ALTER TABLE Nom_Ma_Table DROP FOREIGN KEY pk_name.NAME;
    END FOR;
    END
    DB21034E La commande a été traitée comme une instruction SQL car il ne s'agit
    pas d'une commande valide pour l'interpréteur de commandes. Le message SQL
    suivant a été renvoyé lors de son traitement :
    SQL0104N Une marque inattendue "ALTER TABLE Nom_Ma_Table DRO" figure à la
    suite de "NSTRAINTYP = 'F' DO ". Parmi les marques attendues, on trouve :
    "<compound_SQL_stmt>". LINE NUMBER=5. SQLSTATE=42601

    SQL0104N Une marque inattendue "ALTER TABLE Nom_Ma_Table DRO" figure à la suite de "NSTRAINTYP = 'F'
    DO
    ". Parmi les marques attendues, on trouve : "<compound_SQL_stmt>".

    Explication:

    Une erreur de syntaxe dans une instruction SQL a été détectée à
    la marque indiquée à la suite du texte "<texte>". La zone
    "<texte>" affiche les 20 caractères précédant le caractère
    incorrect dans l'instruction SQL.

    Pour aider le programmeur, une liste partielle de marques
    correctes est fournie dans la zone SQLERRM de la structure SQLCA
    sous la forme "<liste-marques>". Cette liste suppose que
    l'instruction est correcte jusqu'à ce stade.

    L'instruction ne peut pas être traitée.

    Réaction de l'utilisateur:

    Examinez et corrigez l'instruction à proximité de la marque
    indiquée.

    SQLCODE : -104

    SQLSTATE : 42601

    Voilà mes recherches non rien données, Merci pour votre aide.

  2. #2
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 7
    Par défaut
    Personnes n'a d'idées ?? ou de pistes ?? Si j'enlève le Alter Table ça passe sans problème.

  3. #3
    Membre Expert

    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
    Par défaut
    A priori, puisque le caractère de fin d'instruction choisi est @, il faut le mettre à chaque fin d'instruction et ne pas alterner entre @ et ;
    Tu choisis ; ou @ mais pas les deux.
    Pourquoi ces fantaisies ( on voit le résultat ! )alors que le défaut ( ; ) va très bien, hein ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    BEGIN ATOMIC
    FOR pk_name AS
    SELECT NAME FROM SYSIBM.SYSTABCONST WHERE TBNAME = 'Nom_Ma_Table' AND CONSTRAINTYP = 'F'
    DO
    ALTER TABLE Nom_Ma_Table DROP FOREIGN KEY pk_name.NAME@
    END FOR@
    END@

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 7
    Par défaut
    Merci de ta réponse mais le ; est à sa place car le @ défini la fin d'une instruction or le fait d'être dans un Begin indique une partie de code qui se terminera par End@ et toutes les instructions comprisent entre Begin et End se finisent comme du code par ;. Même avec l'essai du @ à la fin de chaques instruction l'erreur est toujours là.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 123
    Par défaut
    Ton pb vient de l'alter. Essaies en le mettant dans une variable et fais un execute immediate.

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 7
    Par défaut
    J'ai toujours le problème Mais sur le EXECUTE IMMEDIATE. Est-il possible d'avoir une syntaxe ? Merci

    Voici la mienne :

    BEGIN ATOMIC
    for pk_name as select CONCAT('ALTER TABLE Nom_Ma_Table DROP FOREIGN KEY ',NAME) AS toto FROM SYSIBM.SYSTABCONST WHERE TBNAME = 'Nom_Ma_Table' AND CONSTRAINTYP = 'F'
    do
    EXECUTE IMMEDIATE pk_name.TOTO;
    end for;
    END@

    Code d'erreur :

    DB21034E La commande a été traitée comme une instruction SQL car il ne s'agit
    pas d'une commande valide pour l'interpréteur de commandes. Le message SQL
    suivant a été renvoyé lors de son traitement :
    SQL0104N Une marque inattendue "pk_name" figure à la suite de "do EXECUTE
    IMMEDIATE". Parmi les marques attendues, on trouve : "JOIN". LINE
    NUMBER=4. SQLSTATE=42601

    SQL0104N Une marque inattendue "pk_name" figure à la suite de "do
    EXECUTE IMMEDIATE". Parmi les marques attendues, on trouve : "JOIN ".

    Explication:

    Une erreur de syntaxe dans une instruction SQL a été détectée à
    la marque indiquée à la suite du texte "<texte>". La zone
    "<texte>" affiche les 20 caractères précédant le caractère
    incorrect dans l'instruction SQL.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/03/2006, 13h41
  2. Alter table dans procédure stockée
    Par mehitabelle dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/11/2005, 16h14
  3. Réponses: 4
    Dernier message: 30/09/2005, 13h14
  4. Problème Alter view dans une procédure stockée
    Par adjava dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/07/2005, 17h45
  5. Problème d'alter table dans une procédure stockée
    Par Oluha dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/03/2005, 09h19

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