Précédent   Forum des professionnels en informatique > Bases de données > Sybase > Adaptive Server Enterprise
Adaptive Server Enterprise Forum d'entraide concernant Sybase Adaptive Server Enterprise, le dataserver phare de Sybase
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/09/2007, 09h37   #1
Membre du Club
 
Inscription : mars 2007
Messages : 248
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 248
Points : 46
Points : 46
Par défaut [ASE 15.0.2][T-SQL] FETCH INTO ROWTYPE (declare cursor for select *)

Bonjour
Contexte: écriture des procédures stockées en T-SQL.

Est-il possible de définir une variable de type enregistrement (row) d'une table
pour faciliter l'écriture des fetch des curseurs ?

J'aimerais pouvoir faire:
Code :
1
2
3
4
DECLARE @v_row <ma_table>.%ROWTYPE
DECLARE C_xxx cursor for SELECT * FROM <ma_table>
puis
FETCH C_xxx into @v_row
et utiliser ensuite les valeurs lues comme C_xxx.<nom_colonne>.
Ceci me permettrait de simplifier les écritures de mes procédures.

Ne l'ayant pas trouvé dans la doc, je me permets de vous demander si c'est vraiment impossible.
Merci
msomso
msomso est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2007, 13h22   #2
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
Non, ce type de syntaxe n'est pas supportée.

Il faut déclarer séparément chaque variable qui sera utilisée dans un FETCH.

Ceci étant - si c'est possible il est préférable d'éviter l'utilisation de curseur et plutôt faire des opérations ensemblistes, même si c'est parfois plus difficile à appréhender au départ qu'une approche procédurale...

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
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2007, 08h51   #3
Membre du Club
 
Inscription : mars 2007
Messages : 248
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 248
Points : 46
Points : 46
Bonjour,
J'aimerais bien les éviter moi aussi, ces écritures pénibles des curseurs.
Il s'agît de copier (migrer) les données de quelque tables d'une base vers une autre (sur le même serveur). L'insertion sur la base cible se fait en ajout et non remplacement. De plus on doit détecter/tracer des lignes en erreur d'intégrité.
Alors, comment faire sans curseur (comment gérer la fin de boucle de la lecture ) ?

Le volume est important (centaines des milliers de lignes) et je voudrais fournir des statistiques sur ce qui est "passé" ou pas en raison des triggers volontairement laissés actifs ( je sais que ce n'est pas performant). J'affiche notamment les données des lignes qui ne passent pas pour faciliter la correction.

Je ne pense pas pouvoir contourner les curseurs, non ?

Merci d'avance pour vos avis
msomso
msomso est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2007, 11h44   #4
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
Effectivement, si il s'agit d'une opération unitaire alors l'utilisation d'un curseur semble la meilleur solution. Il y a probablement d'autres téchniques, mais je ne vois rien de "simple" qui réponde aux besoins.

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
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2007, 16h05   #5
Membre du Club
 
Inscription : mars 2007
Messages : 248
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 248
Points : 46
Points : 46
Merci
msomso est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h06.


 
 
 
 
Partenaires

Hébergement Web