Appel de proc en SQL sur ACS et SQLCOD 466 / SQLSTATE 0100C
Posté : mer. 08 juin 2022, 09:03:28
Bonjour à tous !
Un de mes collègues est en train de mettre en place des PGM qui ont pour but de devenir des API ou des procédures stockées. Il n'y a aucun soucis au niveau du programme en SQLRPG, les variables sont alimentés comme il faut mais lors de l'appel de celui si sur ACS avec l'instruction suivante => call test('00010') ; nous obtenons un SQLSTATE = '0100C' / SQLCOD +466 !
J'ai bien la structure du tableau sur ACS mais aucun élément a l'intérieur alors que j'ai bien une alimentation du tableau via le RPG
Pourtant lors du debug du source le SQLCOD ne prend jamais la valeur +466 donc je n'ai pas pu essayer ce que j'ai trouvé sur volubis :
if SQLCODE = +466;
exec sql ASSOCIATE LOCATORS (:RS1) WITH PROCEDURE DSPLIBL;
exec sql ALLOCATE C1 CURSOR FOR RESULT SET :RS1;
exec sql fetch c1 into :unebib;
MErci d'avance
Voici le source si nous avons oublié un mot clef ou quoi que ce soit :
exec sql
Set Option Commit = *NONE,
DatFmt = *ISO,
TimFmt = *ISO,
DecMpt = *COMMA,
Closqlcsr = *ENDMOD ;
Dcl-pi TEST04;
parm1 char(5);
end-pi;
Dcl-ds outputRowsTable dim(50) Qualified;
Cste zoned(5:0);
Stnom char(35);
END-DS;
Dcl-ds outputRows Qualified;
Cste zoned(5:0);
Stnom char(35);
END-DS;
Dcl-s Cpt int(5);
dcl-s dparm1 int(5);
Cpt = 0;
dparm1 = %dec(parm1: 5: 0);
Exec Sql
declare cursor_societe cursor
for select Cste, Stnom from Societl1
where Cste = :dparm1
order by Cste;
Exec sql
open cursor_societe;
Dow SQLSTATE = '00000';
if Cpt < 50;
Exec sql
fetch next from cursor_societe into :outputRows;
endif;
if SQLSTATE = '00000';
Cpt += 1;
outputRowsTable(Cpt) = outputRows;
endif;
Enddo;
Exec Sql
set result sets array :outputRowsTable for :Cpt rows;
Exec sql
close cursor_societe;
Return;
Un de mes collègues est en train de mettre en place des PGM qui ont pour but de devenir des API ou des procédures stockées. Il n'y a aucun soucis au niveau du programme en SQLRPG, les variables sont alimentés comme il faut mais lors de l'appel de celui si sur ACS avec l'instruction suivante => call test('00010') ; nous obtenons un SQLSTATE = '0100C' / SQLCOD +466 !
J'ai bien la structure du tableau sur ACS mais aucun élément a l'intérieur alors que j'ai bien une alimentation du tableau via le RPG
Pourtant lors du debug du source le SQLCOD ne prend jamais la valeur +466 donc je n'ai pas pu essayer ce que j'ai trouvé sur volubis :
if SQLCODE = +466;
exec sql ASSOCIATE LOCATORS (:RS1) WITH PROCEDURE DSPLIBL;
exec sql ALLOCATE C1 CURSOR FOR RESULT SET :RS1;
exec sql fetch c1 into :unebib;
MErci d'avance
Voici le source si nous avons oublié un mot clef ou quoi que ce soit :
exec sql
Set Option Commit = *NONE,
DatFmt = *ISO,
TimFmt = *ISO,
DecMpt = *COMMA,
Closqlcsr = *ENDMOD ;
Dcl-pi TEST04;
parm1 char(5);
end-pi;
Dcl-ds outputRowsTable dim(50) Qualified;
Cste zoned(5:0);
Stnom char(35);
END-DS;
Dcl-ds outputRows Qualified;
Cste zoned(5:0);
Stnom char(35);
END-DS;
Dcl-s Cpt int(5);
dcl-s dparm1 int(5);
Cpt = 0;
dparm1 = %dec(parm1: 5: 0);
Exec Sql
declare cursor_societe cursor
for select Cste, Stnom from Societl1
where Cste = :dparm1
order by Cste;
Exec sql
open cursor_societe;
Dow SQLSTATE = '00000';
if Cpt < 50;
Exec sql
fetch next from cursor_societe into :outputRows;
endif;
if SQLSTATE = '00000';
Cpt += 1;
outputRowsTable(Cpt) = outputRows;
endif;
Enddo;
Exec Sql
set result sets array :outputRowsTable for :Cpt rows;
Exec sql
close cursor_societe;
Return;