Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [MYSQL] query e function

    ho la seguente query che funziona:

    codice:
    SELECT Conto
    FROM gldplancodedetail
    JOIN glsdettagliomenufield AS XX ON XX.RecId=gldplancodedetail.TipoConto
    WHERE cast(gldplancodedetail.Conto as unsigned) > cast('3000' as unsigned) AND XX.vocemenu='Di Riepilogo'
    AND refglsbalanceplangestion=(SELECT refglsbalanceplangestion FROM gldcategorysectorplanaccount WHERE taglevel='1.1.5') AND NOT (gldplancodedetail.visibility=1)
    order by cast(Conto as unsigned)
    limit 0,1
    e funziona e mi ritorna il conto di riepilogo successivo
    ma se questo lo metto in una funzione per richiamarlo
    mi da altri risultati
    ecco la funzione che ho scritto


    codice:
    DELIMITER $$
    
    DROP FUNCTION IF EXISTS `xxxx`.`filtrosaldiconti`$$
    
    CREATE DEFINER=`root`@`%` FUNCTION `filtrosaldiconti`(visconto varchar(10), parid varchar(30)) RETURNS varchar(10) CHARSET latin1
    BEGIN
    SET @tornocosa = ' ';
    SELECT Conto INTO @tornocosa
    FROM gldplancodedetail
    LEFT JOIN glsdettagliomenufield AS XX ON XX.RecId=gldplancodedetail.TipoConto
    WHERE cast(gldplancodedetail.Conto as unsigned) > cast(visconto as unsigned) AND XX.vocemenu='Di Riepilogo'
    AND refglsbalanceplangestion=(SELECT refglsbalanceplangestion FROM gldcategorysectorplanaccount WHERE taglevel=parid) AND NOT (gldplancodedetail.visibility=1)
    ORDER BY Conto
    LIMIT 1 ;
    RETURN @tornocosa;
    END$$
    
    DELIMITER ;
    come mai?
    cosa sbaglio?
    www.contabilitafacile.it

  2. #2
    sto provando di tutto ma la function mi ritorna altri valori, non capisco....
    www.contabilitafacile.it

  3. #3
    in verità ho scoperto che il problema nasce quando nella function uso il ORDER BY
    www.contabilitafacile.it

  4. #4
    ho risolto riscrivendo la query così

    codice:
    DELIMITER $$
    
    DROP FUNCTION IF EXISTS `xxxx`.`filtrosaldiconti`$$
    
    CREATE DEFINER=`root`@`%` FUNCTION `filtrosaldiconti`(visconto varchar(10), parid varchar(30)) RETURNS varchar(10) CHARSET latin1
    BEGIN
    	RETURN (
    	SELECT ...
    	FROM ...
    	JOIN .... 
    	WHERE .....
    	ORDER BY ....
    	LIMIT 1 );
    	
        END$$
    
    DELIMITER ;
    www.contabilitafacile.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.