|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Nouveau Membre du Club
![]() |
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 :
Code :
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... |
||||
|
00
|
|
|
#2 |
![]() ![]() |
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 |
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() |
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 Donc si vous connaissez un moyen de faire accepter les tables temporaires dans les fonctions, vous êtes les bienvenus... |
|
00
|
|
|
#4 | ||
![]() ![]() |
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 :
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 |
||
|
|
00
|
|
|
#5 | ||
|
Nouveau Membre du Club
![]() |
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 :
|
||
|
00
|
Copyright © 2000-2012 - www.developpez.com