Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Pages: 1







Bonjour,
J'ai presque honte de poster la question, mais je tourne en rond.
J'ai l'habitude de la base de donnée Informix, mais avec la base de données Sybase la syntaxe est différente et je n'arrive pas à finaliser ma procédure.
Voici le scrit de la procédure :
Alter PROCEDURE "DBA"."proc_delai_echeance"() result(@id_delai_1 char(2),@design_echeance_1 varchar(50),@selection_1 char(1)) on exception resume begin --// ----------------------------------------------------- --// ----------------------------------------------------- declare @design_delai varchar(50) ; declare @delai_actif char(1); declare @id_echeance char(2); declare @id_echeance_lien char(2); declare @id_delai_lien char(2); declare @id_delai char(2) ; declare @design_echeance varchar(50) ; declare @selection char(1) ; --// ----------------------------------------------------- --// ----------------------------------------------------- declare cursor_delai cursor for SELECT id, design , delai_actif FROM fi_delaimp WHERE delai_actif ='O' order by design ; --// ----------------------------------------------------- --// ----------------------------------------------------- declare cursor_echeance cursor for SELECT id, id_echeance , id_delai , design FROM fi_dlpossech RIGHT OUTER JOIN fi_echemp ON id_echeance = fi_echemp.id ; open cursor_delai ; set @id_delai = 0 ; set @design_delai ='' ; set @delai_actif ='N' ; B1: loop fetch cursor_delai into @id_delai, @design_delai, @delai_actif ; if sqlcode <> 0 then leave B1 end if; -- //select @id_delai_1 = @id_delai ; open cursor_echeance ; set @selection ='N' ; set @id_echeance =''; set @id_echeance_lien =''; set @id_delai_lien =''; set @design_echeance =''; B2: loop fetch cursor_echeance into @id_echeance, @id_echeance_lien, @id_delai_lien , @design_echeance ; if sqlcode <> 0 then leave B2 end if; -- //================================================================ -- //================================================================ -- //select @design_echeance_1 = @design_echeance ; if @id_delai = @id_delai_lien then set @selection ='O' end if; -- //============================================================== -- //================================================================ -- //select @selection_1 = @selection ; end loop B2; close cursor_echeance ; end loop B1; close cursor_delai ; end
La procédure n'a aucun paramètre en entrée, et ne doit que retourner des valeurs en retours. Le problème est que je n'arrive pas à affecter les valeurs que doivent être retournées, et pour l'instant la procédure ne retourne rien, bien que au debugger tout se passe bien.
Pouvez vous m'aider.
Merci
:modo: :modo: :modo:
Hors ligne














set @id_delai_1 = @id_delai ;
Hors ligne







erasorz a écrit:
Code: mssql
set @id_delai_1 = @id_delai ;
J'avais essayé cette syntaxe d'après les procédures qui figurent dans ma petite application, mais j'ai l'erreur sqlstate = 37000 variable @id_delai_1 not found lors de l'execution de ma procédure ??
Hors ligne














et la déclaration ?
declare @id_delai_1 char(2);
Hors ligne







erasorz a écrit:
et la déclaration ?
Code: mssql
declare @id_delai_1 char(2);
Mais ce sont les variables que je veux retourner, et que j'ai mis dans la partie result
Alter PROCEDURE "DBA"."proc_delai_echeance"() result(@id_delai_1 char(2),@design_echeance_1 varchar(50),@selection_1 char(1))
, mais ce n'est peut être pas comme cela qu'il faut faire pour retourner des valeurs avec cette base de données ??
Hors ligne











Il te faut déclarer tes paramètres en output
Comme dans PL-SQL (Oracle)
Hors ligne







foon a écrit:
Il te faut déclarer tes paramètres en output
Comme dans PL-SQL (Oracle)
Le problème est que je ne connais ni Oracle et ne Sybase mais uniquement Informix comme base de données (nul n'est parfais)
et l'appli que j'ai a modifier est une petite application sur laquelle il y a très peu de procédure stockée
Hors ligne














wazou1812 a écrit:
erasorz a écrit:
et la déclaration ?
Code: mssql
declare @id_delai_1 char(2);Mais ce sont les variables que je veux retourner, et que j'ai mis dans la partie result
Hors ligne







Create Proc TEST ( @code integer output, @chaine char(100) output) As Begin select @code = [... ton script pour remplir la variable ...] select @chaine = [... ton script pour remplir la variable ...] END
Dernière modification par Nephtis (13-05-2009 17:51:04)
Hors ligne







Merci beaucoup pour vos conseils, la procédure fonctionne presque....................
Hors ligne
Pages: 1