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]Syntaxe curseur sur procédure stockée


Sujet :

Adaptive Server Enterprise Sybase

  1. #1
    Nouveau membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 36
    Points : 33
    Points
    33
    Par défaut [ASE]Syntaxe curseur sur procédure stockée
    Coucou!
    C'est encore moi!
    Suite à mon épisode des tables proxy (qui n'est toujours pas résolu, soit dit en passant), j'ai un problème de curseur dans un trigger.
    Voilà les fautifs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DECLARE UtilCurs CURSOR  
    FOR
    CALL PPPUTILL_IDPERI (@id_peri)
     
    DECLARE ClientCurs CURSOR  
    FOR
    CALL PPPCLIENTL_IDPERI (@id_peri_util)
    interactive SQL est assez gentil pour me balancer l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Impossible d'exécuter l'instruction.
    Syntax error near 'Call'
    ...
    Ces déclarations de curseurs ont lieu dans la création d'un curseur.
    Le-dit curseur provient de l'une des bases de données ASA que je migre sous ASE.
    Il a été écrit en Watcom-SQL, que je convertit à la main en Transact-SQL (rassurez-vous, c'est que les 8 triggers, parceque les 250 procs stockées étaient écrites en T-SQL, même si le T-SQL d'ASA et celui d'ASE sont incompatibles ).
    J'ai évidemment essayé de remplacer le CALL par un EXEC, un EXECUTE, un SELECT, avec et sans les parenthèses, mais rien n'y fait.
    Alors, si vous connaissez la syntaxe correcte pour déclarer un curseur sur une procédure stockée en T-SQL chez ASE, je vous aime .
    Si vous savez comment l'utiliser aussi (mais pour ça, j'ai trouvé la syntaxe (normalement... Evidemment j'ai pas testé vu que la déclaration foire...)).

    Merci d'avance!

    P.S. : j'ai cherché sur la doc Sybase (), google, et les FAQ et forum Sybase du présent site.
    P.S.2 : je suis tombé plusieurs fois, pendant mes recherches google, sur un blog ventant que le transfert d'ASA à ASE était facile ( http://mfinkelsztejn.monblogue.branchez-vous.com/ ). J'ai essayé de commenter l'article, mais je n'ai pas pu a cause d'une vieille foirade serveur. Il met un lien vers fadace.developpez.com/sgbdcmp . Si tu le connais, il serait peutêtre judicieux de lui faire changer son article? D'après l'équipe de chez Sybase qui s'occupe de nous, le transfert ASA => ASE est une première (dont nous sommes les heureux gagnants ), donc ça n'a jamais été testé, donc dire que c'est facile est un argument... Commercial...

  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
    Il y a de nombreuses différences entre ASA et ASE... comme tu le voit!

    Sous ASE il n'est pas possible d'ouvir un curseur sur le retour d'une proc.

    Normallement on passe par une table temporaire, ou alors par une table proxy mappée sur la proc (solution lente et à priori à éviter à mon avis).

    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
    Nouveau membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 36
    Points : 33
    Points
    33
    Par défaut
    Merci pour la réponse, je vais essayer avec la table temporaire...


    Au passage, et pour m'éviter de créer un autre thread, je me suis apperçu qu'il m'était imposible de créer une table temporaire dans une fonction (c'est un problème qui n'a rien a voir avec le premier post de cette discussion : je le rapelle, je m'amuse à migrer la base entière).

    Je vois bien comment contourner le problème, soit en créant une proc stockée qui fait la même chose que la fonction (c'est moche), soit en remplaçant la table temporaire (sur laquelle est basé tout l'algorithme de la fonction ) par un système de set_appcontext - get_appcontext (la-dite table temporaire est constituée d'une colonne ID (int) et d'une autre lettre (char(1)), donc c'est faisable, même si une table plus complexe aurait été faisable aussi ), mais ça c'est encore plus moche, mais au moins je modifie que la fonction, et pas les procs qui l'appellent.

    Donc si vous connaissez un moyen de faire accepter les tables temporaires dans les fonctions, vous êtes les bienvenus...

  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
    La base ASE est en quelle version ?

    Quel type de fonction ?

    En général créé les tables temporaires en dehors des procs, comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    create table #foo (...)
    go
    create proc utilise_foo
    ...
    as
    ...
    -- code qui utilise la table #foo
    ...
    C'est particulièrement utile lorsqu'on plusieurs procs qui font référence à la même table temporaire.

    Je n'ai pas essayé, mais peut-être que si on créé la table temporaire en avance la fonction s'y retrouve.

    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
    Nouveau membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 36
    Points : 33
    Points
    33
    Par défaut
    Merci, j'ai trouvé ce genre de conseil lors de mes périgrinations.


    Le truc c'est que je me sers de la table temporaire que dans ma fonction, pas ailleurs, et il faut qu'elle siot réinitialisée à chaque rappel de la fonction.

    Si je créée la table temporaire à l'extérieur de la déclaration de la fonction, elle sera pas déclarée pendant les appels à la fonction? Donc comment y accéder?

    Ceci étant dit : je travaille sur Sybase ASE 15.0.2 (la dernière), et le type de fonction que j'essaie de créer est bien une fonction, pas une procédure stockée (fonctions utilisateurs, celles qui ont été rendues disponibles dans la version 15.0.2), du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE FUNCTION MA_FONCTION(
        @MA_CHAINE varchar(50),
        @MON_ENTIER int
    )
    returns smallint
    as
    begin
    ...
    Au fait, depuis mes expériences en C, j'ai pris le parti de ne plus trop créer d'objets globaux (table temporaire à l'extérieur), parceque je finis toujours par m'y perdre...

Discussions similaires

  1. Curseur sur procédure stockée
    Par djnos dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/04/2007, 09h17
  2. syntaxe d'une procédure stockée
    Par Jordan59 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 11/04/2007, 12h00
  3. [Débutant(e)] Autorisations sur procédures stockées
    Par boulete dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 15/04/2006, 18h08
  4. Paramètres sur Procédure stockée
    Par StarMusic dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/03/2006, 14h58
  5. PB sur procédure stockée
    Par rafounette dans le forum Oracle
    Réponses: 7
    Dernier message: 09/03/2006, 14h29

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