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

    [Mysql] Store procedure, query dinamica e valori di default

    ciao!

    ho questa stored procedure con una query dinamica.
    il problema è che se mettono dei parametri che non restituiscono records, i valori mi ritornano null.
    sarebbe possibile dargli un valore di default, tipo 0?

    codice:
    DELIMITER //
    DROP PROCEDURE IF EXISTS analisi_orfo //
    CREATE PROCEDURE analisi_orfo(
        IN data_from VARCHAR(10),
        IN data_to VARCHAR(10),
        IN fornitore INT,
        IN articolo INT,
        IN stagione VARCHAR(15)
    )
        NO SQL
    BEGIN
        SET @query = CONCAT("SELECT SUM(or_qta) qta, SUM((or_prezzo_acquisto - (or_prezzo_acquisto * or_sconto / 100)) * or_qta) netto
                            FROM orfo_righe
                            INNER JOIN articoli_gest ON artgest_id = or_tipo_articolo
                            INNER JOIN orfo ON orfo_numero = or_bolla
                            WHERE orfo_fornitore = ", fornitore, " "
            );
    
        IF articolo != 0 THEN
            SET @query = CONCAT(@query, "AND or_tipo_articolo = ", articolo, " ");
        END IF;
    
        IF stagione != 'ND' THEN
            SET @query = CONCAT(@query, "AND artgest_desqual2 = '", stagione, "' ");
        END IF;
    
        SET @query = CONCAT(@query, "AND DATE(orfo_data) BETWEEN DATE('", data_from, "') AND DATE('", data_to, "')");
    
        PREPARE comando FROM @query;
        EXECUTE comando;
        DEALLOCATE PREPARE comando;
    END
    

  2. #2

  3. #3
    grazie, ho usato IFNULL:
    codice:
    DELIMITER //
    DROP PROCEDURE IF EXISTS analisi_orfo //
    CREATE PROCEDURE analisi_orfo(
        IN data_from VARCHAR(10),
        IN data_to VARCHAR(10),
        IN fornitore INT,
        IN articolo INT,
        IN stagione VARCHAR(15)
    )
        NO SQL
    BEGIN
        SET @query = CONCAT("SELECT IFNULL(SUM(or_qta), 0) qta,
                            IFNULL(SUM((or_prezzo_acquisto - (or_prezzo_acquisto * or_sconto / 100)) * or_qta), 0) netto
                            FROM orfo_righe
                            INNER JOIN articoli_gest ON artgest_id = or_tipo_articolo
                            INNER JOIN orfo ON orfo_numero = or_bolla
                            WHERE orfo_fornitore = ", fornitore, " "
            );
    
        IF articolo != 0 THEN
            SET @query = CONCAT(@query, "AND or_tipo_articolo = ", articolo, " ");
        END IF;
    
        IF stagione != 'ND' THEN
            SET @query = CONCAT(@query, "AND artgest_desqual2 = '", stagione, "' ");
        END IF;
    
        SET @query = CONCAT(@query, "AND DATE(orfo_data) BETWEEN DATE('", data_from, "') AND DATE('", data_to, "')");
    
        PREPARE comando FROM @query;
        EXECUTE comando;
        DEALLOCATE PREPARE comando;
    END
    
    PS: ottimo link, non conoscevo quel sito, me lo segno!

  4. #4

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.