Erreur avec une procedure

Eléphant du PHP | 288 Messages

28 juil. 2010, 18:33

Je ne sais pas si je peux poster ça ici mais je me lance. J'ai une erreur quand j’appelle une procédure.
L’erreur :
#1312 - PROCEDURE can't return a result set in the given context
la procedure
DROP PROCEDURE `BACKOFFICE_SUBMIT_PACKAGE`//
CREATE DEFINER=`root`@`localhost` PROCEDURE `BACKOFFICE_SUBMIT_PACKAGE`(
    IN iLogin VARCHAR(255),
    IN iIdParentApplication INT(10),
    
    IN iAppName VARCHAR(255),
	IN iAppType TINYINT,
    IN iAppVersion INT(11),
    IN iMetadata TEXT,
    IN iSettings TEXT,
	IN iFields TEXT,
	IN iCreationDate INT(10)
)
BEGIN
    DECLARE tidustemp  INT(10) DEFAULT 0;
    DECLARE tresult TEXT DEFAULT '<response __action="BACKOFFICE_SUBMIT_PACKAGE">';
    SELECT idUser INTO tidustemp FROM `tsf-users` WHERE login=iLogin LIMIT 1;

    INSERT INTO `tsf-applications`
    SET     idDeveloper=tidustemp,
            idParentApplication=iIdParentApplication,
            appName=iAppName,
            appType=iAppType,
            appVersion=iAppVersion,
            metadata=iMetadata,
            settings=iSettings,
            fields=iFields,
            creationDate = iCreationDate;
        
    SET tresult = CONCAT(tresult,'<application __idi="',TRUNCATE(RAND()*1000000000,9),'" __id="',LAST_INSERT_ID(),'" __iddev="',tidustemp,'" __name="',iAppName,'" __type="',iAppType,'" __metadata="',iMetadata,'" __settings="',iSettings,'" __fields="',iFields,'" __creationDate="',iCreationDate,'" />');
	
	SET tresult = CONCAT(tresult,'</response>');
	
    SELECT tresult;
END

J’ai beau chercher je trouve pas pourquoi. Merci d’avance pour vos suggestions

Mammouth du PHP | 661 Messages

29 juil. 2010, 00:26

parce que (de ce qu'il me semble) une procédure n'est pas faite pour retourner quelque chose !... elle peux retourner des éléments, mais ce n'est pas sa fonction primaire ! tu devrais p-e utiliser une FUNCTIONpour ce faire ;)

sinon, pour retourner un élément avec une procédure tu peux faire comme ceci :
DELIMITER // 

CREATE PROCEDURE myProc (IN id INT, OUT result TINYTEXT)
BEGIN

SELECT content INTO result FROM MaTable WHERE id = id ;

END //
et l'employer ainsi ::

CALL myProc (3, @m) ;

SELECT @m ;

(ou dans le genre, j'ai plus les idées claire ^^ ) @+