Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
j'ai une situation avec une procédure stockée. j'appelle ma procédure stockée à partir de PB, et tout marche sans problème, mais cela n'est pas fait dans les règles de l'art. Je m'explique.
Ma procédure stockée (SQL Server 2000) retourne une valeur. lorsque je met le mot clé "return" dans ma procédure, powerbuilder me retourne un message comme koi "Cursor is not open", C'est seulement lorsque je met le mot mot clé select devant la variable à retourner que ça marche.
J'aimerai avoir un peu de lumière par rapport à ce message "Cursor is not open" et voir comment je peux faire fonctionner ma procédure stockée sans difficultés.
voici mon code ci-dessous, du moins, celui qui marche, pour que vous puissier m'aider à l'optimiser et à le rendre présentable.
La procédure Stockée :
ALTER procedure usp_GetNewSeqVal @SeqName nvarchar(255) as begin declare @NewSeqVal int set NOCOUNT ON update AllSequences set @NewSeqVal = CurrVal = CurrVal+Incr where SeqName = @SeqName if @@rowcount = 0 begin print 'Sequence does not exist' return end select @NewSeqVal end
Son Appel dans PB
string ls_err long ll_currentvalue ll_currentvalue = 0 DECLARE proc_GetSequence PROCEDURE FOR dbo.usp_GetNewSeqVal @SeqName = :is_tablename; //variable d'instance contenant le nom de la table EXECUTE proc_GetSequence; FETCH proc_GetSequence INTO :ll_currentvalue; ls_err = sqlca.sqlerrtext CLOSE proc_GetSequence ; if SQLCA.sqlcode <> 0 THEN messagebox("Erreur",ls_err) END IF CLOSE proc_GetSequence ;
Hors ligne
Bonjour,
Tu ne dois par faire le close après le fetch, mais uniquement si il y a une erreur (et normalement il faut arreter le traitement en cours) ou à la fin lorsque tout c'est bien passé.
Hors ligne
Avec ton code tu passe deux fois de suite par CLOSE proc_GetSequence ; est-ce normal?
Hors ligne
Quelqu'un a déjà trouvé la solution à ce problème?
Hors ligne
Bonjour,
Le problème est du au fait de l'utilisation du FETCH alors que sa procédure ne génère pas de result set. return @NewSeqVal
Le fait d'effectuer un select @NewSeqVal a eu pour effet de générer un result set donc on peut dans ce cas utliser la fonction FETCH dans le script PB.
Cdt
Yanis
Hors ligne