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 Anywhere Sybase Discussion :

WHILE avec CURSOR utilisant USE @variable ne donne pas le résultat escompté


Sujet :

SQL Anywhere Sybase

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Octobre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable sécurité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut WHILE avec CURSOR utilisant USE @variable ne donne pas le résultat escompté
    Bonjour à tous,

    j'ai créé la requête suivante pour balayer une liste de schémas de ma base de données et renvoyer la liste des objets modifiés de chaque schéma pour une date donnée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    DECLARE schcsr cursor
    for select name from master..sysdatabases where name like 'A%' or name like 'D%'
    go
    set nocount on
    DECLARE @schema varchar(10)
    DECLARE @DATE DATETIME
    SELECT @DATE='2013/01/01'
    open schcsr
    fetch schcsr into @schema
    while @@sqlstatus = 0
    begin
        USE @schema
        SELECT @schema AS 'Base'
        SELECT name, type, crdate, expdate FROM sysobjects 
        WHERE crdate >= @DATE OR expdate >= @DATE ORDER BY expdate
     
        fetch schcsr into @schema
    end
    close schcsr
    deallocate cursor schcsr
    go
    J'initialise une variable @schema avec un CURSOR sur le SELECT de SYSDATABASES pour récupérer les noms de mes schémas puis je l'utilise dans une boucle WHILE pour rechercher mes objets modifiés en faisant un USE @schema pour me placer sur le bon.

    La requête fonctionne, je n'ai aucune erreur, SELECT @schema m'affiche bien successivement ma 30aine de schémas

    MAIS.... La requête sur SYSOBJECTS m'affiche 30 fois me même résultat!!!

    Je m'explique:

    - Si, pour une date donnée, le premier schéma traité par la requête contient des objets modifiés, j'aurais cet objet modifié pour tous les schémas.
    - Si, pour une autre date, je n'ai pas d'objets modifiés pour le premier schéma, tous les schémas apparaitront non modifiés.
    - Or je sais que certains ont des tables ou des vues modifiées à certaines dates et d'autres à d'autres dates.

    Il y a donc un Hic!. Je ne peux pas faire de COMMIT (GO) dans un Begin/ End pour être sûr que le USE soit bien pris en compte et la syntaxe FROM @schema..sysobjects n'est pas autorisée que je sache.

    Quelqu'un a-t-il une idée? Merci beaucoup pour votre aide.

  2. #2
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 247
    Points : 473
    Points
    473
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    tu peux utiliser du sql dynamique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    exec ('SELECT name, type, crdate, expdate FROM '+@schema+'..sysobjects 
    WHERE... ')
    sans le use

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Octobre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable sécurité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup d'avoir pris le temps de répondre et pour l'idée mais malheureusement la syntaxe n'a été ajoutée qu'à partir de Sybase V12 et je suis en V11. Seule la syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC procedure_stockée
    était alors reconnue. Et evidemment dans mon cas je n'ai absolument pas le droit de créer quelque objet que ce soit (vu que je les audite )


    L'idée serait peut être de comprendre pourquoi ma boucle sur les différents schémas ne renvoie pas les bons résultats alors que le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    SELECT @schema AS 'base'
    ...
    affiche bien les bons noms. De plus, l'environnement IDE réagit bien au USE puisque si je sélectionne le premier schéma dans la liste déroulante des schémas et que j'exécute la requête, je me retrouve bien sur le dernier en fin de requête. J'ai fais le tests aussi bien sur "SQL Advantage" que sur un intégré comme "Aqua data Studio 14". --> Résultats identiques (ce qui est somme toute normal)

    Si quelqu'un à d'autres idées, je suis preneur.

Discussions similaires

  1. Ma requête ne me donne pas le résultat escompté
    Par Invité dans le forum Langage SQL
    Réponses: 4
    Dernier message: 23/06/2014, 14h50
  2. Réponses: 2
    Dernier message: 30/12/2011, 14h23
  3. [XL-2003] pb sur formule qui ne donne pas le résultat escompté
    Par midge dans le forum Excel
    Réponses: 2
    Dernier message: 06/02/2011, 15h49
  4. [GNUPlot] Multiplot qui ne donne pas le résultat escompté
    Par Nicocot dans le forum Autres langages
    Réponses: 0
    Dernier message: 24/11/2008, 20h05
  5. Problème avec l'utilisation des variables de session
    Par WagaSeb dans le forum Langage
    Réponses: 16
    Dernier message: 22/06/2007, 15h46

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