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;
Appel de proc en SQL sur ACS et SQLCOD 466 / SQLSTATE 0100C
Appel de proc en SQL sur ACS et SQLCOD 466 / SQLSTATE 0100C
Modifié en dernier par LeMouton le mer. 08 juin 2022, 10:38:16, modifié 1 fois.
L'informatique c'est fun, puis il y a eu le user et l'imprimante
-
- Messages : 54
- Enregistré le : ven. 22 janv. 2021, 10:21:13
Re: Appel de proc en SQL sur ACS et SQLCOD 466 / SQLSTATE 0100C
Bonjour,
Je viens d'essayer de mon côté (sur une procédure existante), j'obtiens bien le sqlcode +466 / sqlstate 0100C : Sébastien.
Je viens d'essayer de mon côté (sur une procédure existante), j'obtiens bien le sqlcode +466 / sqlstate 0100C : Sébastien.
Re: Appel de proc en SQL sur ACS et SQLCOD 466 / SQLSTATE 0100C
Bonjour Sebastien,
Merci pour ta réponse, je n'obtiens cependant aucun résultat dans mon tableau via ACS, je ne vois que la structure du tableau. Pourtant via le RPG, j'ai bien des lignes qui le remplissent.
Est ce que c'est ton cas également ?
Merci pour ta réponse, je n'obtiens cependant aucun résultat dans mon tableau via ACS, je ne vois que la structure du tableau. Pourtant via le RPG, j'ai bien des lignes qui le remplissent.
Est ce que c'est ton cas également ?
L'informatique c'est fun, puis il y a eu le user et l'imprimante
-
- Messages : 54
- Enregistré le : ven. 22 janv. 2021, 10:21:13
Re: Appel de proc en SQL sur ACS et SQLCOD 466 / SQLSTATE 0100C
Mes résultats s'affichent correctement.
je viens de faire un petit test avec le source suivant :
J'obtiens bien mon/mes résultat(s).
je viens de faire un petit test avec le source suivant :
Code : Tout sélectionner
dcl-pi TSTPROC3;
cusnum zoned(6);
end-pi;
Dcl-S rowCount Int(10) inz(99); // Nombre de postes à retourner
dcl-s i zoned(3) inz(0);
// Tableau de résultat
Dcl-Ds resultSet Dim(99) Qualified;
cusnum zoned(6) inz(0);
lstnam varchar(8) inz('');
street varchar(13) inz('');
End-Ds;
Dcl-Ds resultSetDS Qualified;
cusnum zoned(6) inz(0);
lstnam varchar(8) inz('');
street varchar(13) inz('');
End-Ds;
clear resultSet;
i=0;
EXEC SQL
DECLARE cListe CURSOR FOR
SELECT cusnum,
lstnam,
street
FROM QIWS.QCUSTCDT
WHERE (cusnum = :cusnum
or :cusnum = 0)
ORDER BY lstnam;
EXEC SQL
OPEN cListe;
Dow SQLSTATE = '00000';
if i < 50;
EXEC SQL
FETCH NEXT FROM cListe
INTO :resultSetDS;
endif;
if SQLSTATE = '00000';
i += 1;
resultSet(i) = resultSetDS;
endif;
Enddo;
// Envoi des infos
EXEC SQL
SET RESULT SETS ARRAY :resultSet FOR :i ROWS;
EXEC SQL
CLOSE cListe;
return;
Code : Tout sélectionner
create or replace procedure TSTPROC3 (
IN cusnum NUMERIC(6)
)
LANGUAGE RPGLE
EXTERNAL NAME TSTPROC3 GENERAL;
call TSTPROC3(839283);
call TSTPROC3(0);
-
- Messages : 54
- Enregistré le : ven. 22 janv. 2021, 10:21:13
Re: Appel de proc en SQL sur ACS et SQLCOD 466 / SQLSTATE 0100C
Utilisation dans un RPG:
Re: Appel de proc en SQL sur ACS et SQLCOD 466 / SQLSTATE 0100C
Merci beaucoup
En effet j'ai oublié cette partie =>
Create or replace procedure XXXXX ( )
LANGUAGE RPGLE
EXTERNAL NAME TSTPROC3 GENERAL;
En effet j'ai oublié cette partie =>
Create or replace procedure XXXXX ( )
LANGUAGE RPGLE
EXTERNAL NAME TSTPROC3 GENERAL;
L'informatique c'est fun, puis il y a eu le user et l'imprimante