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

    Aiuto con Tutorial di esempio: database prenotazioni alberghiere

    Salve, mi sto' avvicinando a mysql, e sto' provando a creare il database di esempio di html.it. Fino a creare le tabelle e inserire i dati tutto ok, però al momento di inserire la stored funcion il server non mi accetta l'inserimento, e mi ritorna il seguente messaggio:

    """
    Errore
    Pare che ci sia un errore nella query SQL immessa. L'errore del server MySQL mostrato qui sotto, se c'è, può anche aiutare nella risoluzione del problema

    ERROR: Stringa di Punctuation Sconosciuta @ 11
    STR: //
    SQL: DELIMITER //
    CREATE FUNCTION prezzo(arrivo date, partenza date,
    tipo enum('singola','doppia','matrimoniale'))
    RETURNS DECIMAL(7,2)
    READS SQL DATA
    BEGIN
    DECLARE varData DATE;


    query SQL:

    DELIMITER // CREATE FUNCTION prezzo(arrivo date, partenza date, tipo enum('singola','doppia','matrimoniale')) RETURNS DECIMAL(7,2) READS SQL DATA BEGIN DECLARE varData DATE;

    Messaggio di MySQL:

    #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 'DELIMITER //
    CREATE FUNCTION prezzo(arrivo date, partenza date,
    tipo e' at line 1

    """"

    la stored funcion è la seguente, che si può travare a questo link:

    http://database.html.it/guide/lezion...ioni-alberghi/

    DELIMITER //
    CREATE FUNCTION prezzo(arrivo date, partenza date,
    tipo enum('singola','doppia','matrimoniale'))
    RETURNS DECIMAL(7,2)
    READS SQL DATA
    BEGIN
    DECLARE varData DATE;
    DECLARE varTotale DECIMAL(7,2) default 0;
    DECLARE varPrezzo DECIMAL(7,2);
    SET varData = arrivo;
    WHILE varData < partenza DO
    SELECT prezzo INTO varPrezzo FROM prezzi
    WHERE varData BETWEEN periodoDal AND periodoAl
    AND tipoCamera = tipo;
    SET varTotale = varTotale + varPrezzo;
    SET varData = DATE_ADD(varData,INTERVAL 1 day);
    END WHILE;
    return varTotale;
    END; //
    DELIMITER ;


    Dimenticavo, il server è 5.0

    Scusate l'ìgnoranza...
    e grazie fin da ora

  2. #2
    l'errore è chiaro: errore di sintassi, quindi hai scritto qualcosa male. e vedendo la riga di dichiarazione

    CREATE FUNCTION prezzo(arrivo date, partenza date,tipo enum('singola','doppia','matrimoniale'))
    RETURNS DECIMAL(7,2)

    si vede che i campi 'arrivo date' e 'partenza date' hanno uno spazio come separatore ilc he non è consentito e mysql pensa che si tratti di variabili separate senza che sappaia come elaborarle. Per precauzione al posto degli spazi è consigliatissimo mettere un underscore (_)

  3. #3
    Grazie.
    Ho provato.
    Niente da fare...
    Ho tolto lo spazio, però mi restituisce sempre errore di sintassi.
    Sicuro c'é un errore che non trovo.
    Ciao

  4. #4

    prova in questo modo:


    CREATE FUNCTION prezzo(arrivo date, partenza date, tipo enum('singola','doppia','matrimoniale','tripla')) RETURNS DECIMAL(7,2)
    READS SQL DATA
    BEGIN
    DECLARE varData DATE;
    DECLARE varTotale DECIMAL(7,2) default 0;
    DECLARE varPrezzo DECIMAL(7,2);
    SET varData = arrivo;
    WHILE varData < partenza DO
    SELECT prezzo INTO varPrezzo FROM prezzi
    WHERE varData BETWEEN periodoDal AND periodoAl
    AND tipoCamera = tipo;
    SET varTotale = varTotale + varPrezzo;
    SET varData = DATE_ADD(varData,INTERVAL 1 day);
    END WHILE;
    return varTotale;
    END;


    la casella successiva dove ti mette il delimitatore con ; sostituiscilo con //

  5. #5



    Dalila 72 grazie per la risposta che ho trovato solo ora, ho provato, ma mi restituisce questo:

    Errore
    query SQL:

    CREATE FUNCTION prezzo(

    arrivo date,
    partenza date,
    tipo enum( 'singola', 'doppia', 'matrimoniale', 'tripla' )
    ) RETURNS DECIMAL( 7, 2 ) READS SQL DATA BEGIN DECLARE varData DATE;

    DECLARE varTotale DECIMAL( 7, 2 ) default 0;

    DECLARE varPrezzo DECIMAL( 7, 2 ) ;

    SET varData = arrivo;

    WHILE varData < partenza DO SELECT prezzo
    INTO varPrezzo
    FROM prezzi
    WHERE varData
    BETWEEN periodoDal
    AND periodoAl
    AND tipoCamera = tipo;

    SET varTotale = varTotale + varPrezzo;

    SET varData = DATE_ADD( varData, INTERVAL 1 DAY ) ;

    END WHILE;

    RETURN varTotale;

    END ;



    Messaggio di MySQL:

    #1419 - You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)


    Sai che è?
    Grazie Ciao

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.