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 :

[ASE] Impossible de supprimer une table de type tempdb..matable


Sujet :

Adaptive Server Enterprise Sybase

  1. #1
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 52
    Points : 54
    Points
    54
    Par défaut [ASE] Impossible de supprimer une table de type tempdb..matable
    Bonjour,

    voila je vous expose le probleme.

    J'ai une procedure stockee qui créer une table de type temporaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CREATE TABLE tempdb..matable
    (
    ...
    )
    Cette table est doit perdurer après la fin de la procedure car elle est utilisée ailleurs, donc je n'utilise pas de table de type "#".

    Lors du lancement d'une autre procedure (qui utilise le même nom de table), je commence par verifier l'existance de cette table, avec la commande suivante (comme ca si elle existe elle doit etre supprimée) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    IF EXISTS (SELECT 1 FROM tempdb..sysobjects WHERE name = 'matable' AND type = 'U')
    BEGIN
        DROP TABLE tempdb..matable
        SELECT @erreur = @@ERROR
        IF @erreur <> 0
        BEGIN
            PRINT 'CRD:KO DROP TABLE tempdb..matable - Erreur SYBASE N° : %1!', @erreur
            RETURN
        END
    END
    Sauf que lorsque ce code s'execute (dans la seconde procedure) la table n'est pas droppée.

    Est ce que cela est du a un probleme connu de Sybase ou alors est ce un probleme de parametrage ou mieux encore est ce un probleme de syntaxe dans ma requete?

    Je vous remercie par avance de vos réponses.

    Version de Sybase utilisée :
    select @@version :
    Adaptive Server Enterprise/12.5.1/EBF 11659 ESD#2/P/RS6000/AIX 4.3.3/ase1251/1838/32-bit/FBO/Fri Feb 20 06:56:30 2004

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    Est-ce qu'il y a un message d'erreur?

    (une possibilité est que la table est "en utilisation", dans ce cas on ne peux pas la dropper)

    Michael
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

  3. #3
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 52
    Points : 54
    Points
    54
    Par défaut
    le message d'erreur est assez simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Insert error: column name or number of supplied values does not match table
    definition.
    (return status = -6)
     
     -------------------- -----------
     >> VALEUR DE @@error         213
    En fait l'erreur donnée ci-dessus vient du fait que la table temporaire à un nombre de champ différent celon que je suis dans la premiere ou seconde procedure.

    dans la premiere procedure la table comporte 13 colonnes et dans la seconde la table comporte 14 colonnes. Mais lors de l'appel de la seconde le code que j'ai donné ci-dessus pour verifier l'existance de la table et la dropper ne se fait pas. D'ou le code d'erreur de probleme d'insertion.

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    Attention - on ne peux pas dropper la table dans le même "batch" que celui ou on va exécuter un insert.

    Donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if object_id(ma_table) is not null
        drop table ma_table
    go
    create table ma_table (...)
    go
    create proc foo
    ...
    Si il faut créer cette table dans une proc stockée alors il faudra peut-être recourir au SQL dynamique (execute immediate).

    Comme cette table existe sous deux formes différente je pense qu'il faudrait revoir le design - j'utiliserai des noms de tables différents, ou alors si la table tempo doit simplement être visible sur la même connexion alors il suffit de pré-créer la table tempo avec le # avant l'exécution de la proc.

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    create table #ma_table(...)
    go
    create proc ma_proc ...
    as
    ...
    insert #ma_table ...
    Lorsque la proc termine la table #ma_table reste dispo tant qu'on est sur la même connexion.

    Michael
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

  5. #5
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 52
    Points : 54
    Points
    54
    Par défaut
    Merci je pense avoir compris la reponse du coup je me sert de la fonction exec(), ou j'ai mis la commande du DROP et cela fonctionne.

    au cas ou je met quand même l'exemple de ce que j'ai fait.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    IF EXISTS (SELECT 1 FROM tempdb..sysobjects WHERE name = 'matable' AND type = 'U')
    BEGIN
        exec("DROP TABLE tempdb..matable")
        SELECT @erreur = @@ERROR
        IF @erreur <> 0
        BEGIN
            PRINT 'CRD:KO DROP TABLE tempdb..matable - Erreur SYBASE N° : %1!', @erreur
            RETURN
        END
    END
    En tout cas merci mpeppler pour ton aide.

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

Discussions similaires

  1. [AC-2010] Impossible de supprimer une table, un formulaire ou une requête
    Par leonnikita dans le forum Access
    Réponses: 4
    Dernier message: 25/03/2014, 18h39
  2. [AC-2007] Impossible de supprimer une table
    Par dumas.blr dans le forum VBA Access
    Réponses: 21
    Dernier message: 04/02/2011, 16h01
  3. Réponses: 2
    Dernier message: 16/01/2008, 19h13
  4. ASE 12.5.3 : impossible de supprimer une table
    Par Commandant dans le forum Sybase
    Réponses: 2
    Dernier message: 07/08/2007, 10h26
  5. Impossible de supprimer une table temporaire
    Par benjisan dans le forum Access
    Réponses: 2
    Dernier message: 27/06/2007, 09h43

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