|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : avril 2005 Messages : 20 ![]() |
apparemment c'est pas comme ça :
Code :
alors comment ? |
||
|
|
00
|
|
|
#2 | ||||
|
Nouveau Membre du Club
![]() Inscription : avril 2005 Messages : 64 ![]() |
Pour une procédure stockée :
Code :
Code :
|
||||
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : avril 2005 Messages : 20 ![]() |
et mes curseurs, je les déclare où par rapport à la procédure ?
(ainsi que le variables éventuelles) |
|
|
00
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Inscription : avril 2005 Messages : 64 ![]() |
Il me semble qu'il faut déclarer les curseurs après la déclaration de tes variables locales. Mais après la déclaration des curseurs tu ne peux plus déclarer d'autres variables. Je suis pas très sur de tout ca puisque je travaille justement sur ca aussi et je teste.
|
|
|
00
|
|
|
#5 | ||
|
Invité de passage
![]() Inscription : avril 2005 Messages : 20 ![]() |
ah, et bien quand tu as une réponse préviens-moi : moi j'ai essayé de déclarer le cursor au début du Begin et ça marche mais après j'arrive pas à l'utiliser, mais peut être que je m'y prends mal aussi :
Code :
|
||
|
|
00
|
|
|
#6 | ||
|
Nouveau Membre du Club
![]() Inscription : avril 2005 Messages : 64 ![]() |
Bah pareil lol
Sinon voila un exemple de curseur simple mais ca te donne la syntaxe: Code :
|
||
|
|
00
|
|
|
#7 | ||
|
Invité de passage
![]() Inscription : avril 2005 Messages : 20 ![]() |
Où NUM, DATE1 et TEXTE ont été déclarés juste avant le Cursor je suppose ?
Mais alors comment est-ce que je dois faire pour obtenir quelque chose qui voudrait dire à peu près : Code :
|
||
|
|
00
|
|
|
#8 |
|
Nouveau Membre du Club
![]() Inscription : avril 2005 Messages : 64 ![]() |
heu attend le résultat de ton select qu'est ce que tu veux en faire ?
Et puis " from schemapk || '.' || tablepk; " je suppose que schemapk est une variable contenant le nom d'un schema et tablepk celui d'une table , jsui pas sur que db2 accepte ce genre de d'ecriture mais ptet. |
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : avril 2005 Messages : 20 ![]() |
sous cette forme je veux rien en faire, j'essaye un début mais à la fin la requête sera plus compliquée, mais si déjà ça ça marche pas...
(d'ailleurs ça ne marche pas) En fait, mon curseur attaque la table sysibm.sqlforeignkeys qui contient les infos sur les clés étrangères utilisées dans la base : il me retourne les infos sur la clé étrangère (nom de schéma, table et colonne) et sur la clé primaire associée (nom de schéma, table et colonne). partant de là, je veux aller vérifier si pour cette clé étrangère, toutes les valeurs qu'elle contient existent bien dans la colonne clé primaire de l'autre table. Et non non, il a pas l'air d'accepter, il trouve même cela "inattendu", m'a-til dit. |
|
|
00
|
|
|
#10 |
|
Nouveau Membre du Club
![]() Inscription : avril 2005 Messages : 64 ![]() |
essaie ca :
DECLARE at_end INT DEFAULT 0; DECLARE not_found CONDITION FOR '02000'; DECLARE cur_tablefk CURSOR FOR SELECT <tes colonnes> from sqlforeignkeys ; DECLARE CONTINUE HANDLER FOR not_found SET at_end = 1; OPEN cur_tablefk ; FETCH cur_tablefk INTO schemapk, tablepk, colpk, schemafk, tablefk, colfk; while at_end = 0 do <tu fais ici tes vérifications> ; FETCH cur_tablefk INTO schemapk, tablepk, colpk, schemafk, tablefk, colfk; end while; CLOSE CURSEUR ; |
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Inscription : avril 2005 Messages : 20 ![]() |
C'est déjà exactement ce que je fais, ce que je n'arrive pas, c'est la partie 'vérifications', parce qu'il faudrait que j'arrive à faire quelque chose du style de ce que j'ai mis dans le message du 27 avril, 16:21.
|
|
|
00
|
|
|
#12 |
|
Nouveau Membre du Club
![]() Inscription : avril 2005 Messages : 64 ![]() |
Dans la partie déclaration fais :
DECLARE TEXTE VARCHAR(200); ensuite tu initialise ainsi : SET TEXTE = 'select count(*) from ?.? ' ; oui c bien un point d'interrogation suivi d'un point et ensuite d'un point d'interrogation lol ensuite: PREPARE REQUETE FROM TEXTE; tu reprend ce que ta deja fait et dans la partie vérification dans le while tu fais : EXECUTE TEXTE USING schemapk,tablepk; Mais bon tu pourra pas voir le résultat du select dans je te conseille de le ranger dans une variable, ce qui donnerai pour la variable TEXTE: SET TEXTE = 'select count(*) into <nomvariable> from ?.? ' ; |
|
|
00
|
|
|
#13 | ||
|
Invité de passage
![]() Inscription : avril 2005 Messages : 20 ![]() |
Mon code est de plus en plus brutal (je suis désolé d'infliger ça un vendredi matin, mais mon patron attend que je lui montre un truc qui marche aujourd'hui, alors j'aimerais pas avoir trop de retard).
Alors j'en suis là : (tout y est cette fois, pas simplifié) : l'erreur se situe sur la ligne "declare CONTINUE HANDLER FOR not_found_ref SET at_end_ref = 1" avec le message suivant : Une condition ou une valeur SQLSTATE spécifiée dans un gestionnaire n'est pas autorisée. cela dit ce n'est sûrement pas la seule erreur, mais il veut me les donner qu'une par une. Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com