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

    [MySQL] Problema di sintassi in Stored Procedure

    ciao ragazzi.
    sto cercando di scrivere una stored procedure, ma ottengo sempre un errore che non riesco a trovare:
    codice:
    delimiter //
    CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_import_bolle_ft`(IN `nspe` INT, IN `numero` VARCHAR(20), IN `causale` SMALLINT(4), IN `magazzino` INT, 
     IN `nmat` INT, IN `qta` SMALLINT(6), IN `importo` DECIMAL(5,2), IN `data` DATE)
        NO SQL
    BEGIN
        DECLARE affected_rows INT DEFAULT 0;
        INSERT IGNORE INTO xxl_bolle VALUES(nmat, nspe, numero, causale, magazzino, qta, importo, data, NOW());
            SET affected_rows = (SELECT ROW_COUNT());
            IF affected_rows > 0 THEN
                    IF causale = 4020 OR causale = 4022 THEN
                      INSERT INTO magazzini_fatturazione VALUES(NULL, nmat, magazzino, qta, qta, NOW(), NOW())
                          ON DUPLICATE KEY UPDATE ftm_qta = (ftm_qta + qta),
                          ftm_qta_caricamento = (ftm_qta_caricamento + qta), ftm_modifica = NOW();
                    ELSE IF causale = 4025 OR causale = 4027 THEN
    
                    END IF;
             END IF;
    END
    l'errore è questo:
    codice:
    #1064 - You have an error in your SQL syntax; check the manual that  corresponds to your MySQL
    server version for the right syntax to use  near 'END IF;          END IF; END' at line 15
    qualche idea??

  2. #2
    errore stupido.
    ho risolto, ELSEIF:
    codice:
    delimiter //
    CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_import_bolle_ft`(IN `nspe` INT, IN `numero` VARCHAR(20), IN `causale` SMALLINT(4), IN `magazzino` INT, 
     IN `nmat` INT, IN `qta` SMALLINT(6), IN `importo` DECIMAL(5,2), IN `data` DATE)
        NO SQL
    BEGIN
        DECLARE affected_rows INT DEFAULT 0;
        INSERT IGNORE INTO xxl_bolle VALUES(nmat, nspe, numero, causale, magazzino, qta, importo, data, NOW());
            SET affected_rows = (SELECT ROW_COUNT());
            IF affected_rows > 0 THEN
                    IF causale = 4020 OR causale = 4022 THEN
                      INSERT INTO magazzini_fatturazione VALUES(NULL, nmat, magazzino, qta, qta, NOW(), NOW())
                          ON DUPLICATE KEY UPDATE ftm_qta = (ftm_qta + qta),
                          ftm_qta_caricamento = (ftm_qta_caricamento + qta), ftm_modifica = NOW();
                    ELSEIF causale = 4025 OR causale = 4027 THEN
                      INSERT INTO magazzini_fatturazione VALUES(NULL, nmat, magazzino, qta, qta, NOW(), NOW())
                          ON DUPLICATE KEY UPDATE ftm_qta = (ftm_qta - qta), ftm_modifica = NOW();
                    END IF;
             END IF;
    END

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.