| SQL SELECT INTO .... |
|
Vous lancez une requête SQL dans une procédure ou dans un SQL embarqué et vous obtenez ce message :
ID message . . . . . . : SQL0811 Gravité . . . . . . . : 30
Type de message . . . : Diagnostic
Message . . . . : Résultat de SELECT dépasse une ligne.
C'est que vous avez fait un select into et que plusieurs enregistrements existent.
3 cas possibles :
A) C'est une erreur, vous devez changer votre critère de tri
B) Vous avez besoin de tous les enregistrements, vous pouvez passer par un curseur
C) Le premier vous suffirait, il est possible de sélectionner un seul enreg en utilisant la clause
FETCH FIRST ROW ONLY
Exemple :
Récupération du libellé article d'un fichier de travail dans une procédure
CREATE PROCEDURE reclibart (IN Pident DECIMAL(5, 0))
LANGUAGE SQL
SPECIFIC reclibart
NOT DETERMINISTIC
MODIFIES SQL DATA
CALLED ON NULL INPUT
SET OPTION
ALWBLK = *ALLREAD ,
ALWCPYDTA = *OPTIMIZE ,
COMMIT = *NONE ,
CLOSQLCSR = *ENDMOD ,
DECRESULT = (31, 31, 00) ,
DFTRDBCOL = *NONE ,
DYNDFTCOL = *NO ,
DYNUSRPRF = *USER ,
SRTSEQ = *HEX
BEGIN
DECLARE w_LIBEL CHAR (18) ;
DECLARE NON_TROUVE INT DEFAULT 0;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET NON_TROUVE = 1 ;
SELECT PAYS INTO w_LIBEL
FROM W_ART01
WHERE pident = Aident
FETCH FIRST ROW ONLY ;
IF NON_TROUVE = 0 THEN
.... traitement ;
END IF ;
END ;
Si vous avez deux fois l'article dans votre fichier, il prendra le premier.
|