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 12.5] cursor dynamique


Sujet :

Adaptive Server Enterprise Sybase

  1. #1
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut [ASE 12.5] cursor dynamique
    Bonjour,
    après des recherches infructueuses, je sollicite votre aide.
    Est-il possible, et si oui comment, de créer un CURSOR dynamiquement ?
    Le select dynamique fonctionne sans problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE Procedure DYNAPROC
      @NUM_HISTO tinyint,
      @MAX int
    AS
    BEGIN
      declare @REQUETE char( 1000 )
     
      select @REQUETE = "sp_spaceused HIST_0" + convert( varchar, @NUM_HISTO )
      print @REQUETE
      exec (@REQUETE)
    end
    De même un cursor "normal" en dur fonctionne bien sur sans problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    declare CUR_HISTO cursor for select NUM, TP, ST, MONTANT from HIST_02 for read only
            open CUR_HISTO
            fetch CUR_HISTO into @NUM, @TP, @ST, @MONTANT
            select @RET = @@sqlstatus
     
            while( @RET = 0 )
            begin
                    if( @MONTANT >= @MAX )
                    begin
                            print "ok"
                    end
                    fetch CUR_HISTO into @NUM, @TP, @ST, @MONTANT
                    select @RET = @@sqlstatus
            end
    Par contre, là, ça plante à l'exécution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select @REQUETE = 'declare CUR_HISTO cursor for select NUM, TP, ST, MONTANT from HIST_02 for read only'
    exec (@REQUETE)
    open CUR_HISTO
            fetch CUR_HISTO into @NUM, @TP, @ST, @MONTANT
            select @RET = @@sqlstatus
    ...
    avec l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    The cursor 'CUR_HISTO' can not be used as it could not be found. It is possible that either it was not declared or it is not
    available in the current context.
    J'ai essayé pleins de techniques différentes, mais à chaque fois la même erreur. D'après ce que je comprend, le curseur serait construit dans un processus différent, et après le "exec", le curseur n'existe plus. Pouvez-vous m'aider ?
    Merci.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  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
    L'exec() dynamique s'exécute dans son propre contexte - il est impossible de déclarer un CURSOR de cette façon.

    Je ne sais pas si il y a un moyen d'arriver au résultat que tu cherche, mais à priori je ne le pense pas.

    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
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Citation Envoyé par mpeppler Voir le message
    L'exec() dynamique s'exécute dans son propre contexte - il est impossible de déclarer un CURSOR de cette façon.

    Je ne sais pas si il y a un moyen d'arriver au résultat que tu cherche, mais à priori je ne le pense pas.

    Michael
    C'est justement ce que je craignais.
    Merci

    Peut-être que je n'ai pas la bonne approche du problème...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

Discussions similaires

  1. [Proc Stockée] CURSOR dynamique
    Par psykoleouf dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 21/02/2008, 15h05
  2. probleme cursor dynamique
    Par juin29 dans le forum Oracle
    Réponses: 5
    Dernier message: 25/11/2006, 08h41
  3. fetch d'un cursor dynamique probleme
    Par juin29 dans le forum Oracle
    Réponses: 1
    Dernier message: 24/11/2006, 07h17
  4. [ASE 12.5.3][TSQL] - Creation d'une table temporaire en dynamique
    Par CVince dans le forum Adaptive Server Enterprise
    Réponses: 4
    Dernier message: 16/06/2006, 15h30
  5. [ASE] Les locks avec un cursor for update
    Par PiyuXYZ dans le forum Sybase
    Réponses: 1
    Dernier message: 11/02/2006, 13h17

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