Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427

    store procedure (avanzato)

    codice:
    DELIMITER $$
    
    DROP PROCEDURE IF EXISTS `hotel_progetto`.`test10` $$
    CREATE DEFINER=`root`@`localhost` PROCEDURE `test10`(arrivo DATE, partenza DATE)
    BEGIN
       DECLARE varData DATE;
        DECLARE outData DATE DEFAULT DATE_ADD(varData,INTERVAL 1 day);
            DECLARE q INT;
            DECLARE r INT;
            DECLARE s INT;
            DECLARE ind DAte;
            DECLARE outd DAte;
            DECLARE conta INT DEFAULT 0;
            DECLARE x INT;
             DECLARE cur1 CURSOR FOR SELECT ID FROM hotel ;
             DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET conta = 1;
            CREATE TEMPORARY TABLE IF NOT EXISTS temptable1 (a INT,ID3 INT,test DAte,test1 Date,id2 INT,id4 INT,data1 DAte,data2 Date) ENGINE=MEMORY;
    
            SET varData = arrivo;
            SET outData = DATE_ADD(arrivo,INTERVAL 1 day);
    OPEN cur1;
    FETCH cur1 INTO x;
    ciclo1: WHILE conta != 1 DO
    
    WHILE varData < partenza DO
    SELECT quantita,id,id_htl,dal,al INTO q,r,s,ind,outd FROM allottment WHERE dal < varData and outData < al AND ID_HTL = x limit 1;
    
             SET varData = DATE_ADD(varData,INTERVAL 1 day);
             SET outData = DATE_ADD(varData,INTERVAL 1 day);
    
    INSERT INTO temptable1 (a,ID3,ID2,test,test1,data1,data2) VALUES (q,r,s,ind,outd,vardata,outdata);
    
    END WHILE;
    
    FETCH cur1 INTO x;
    END WHILE;
    
    select * from temptable1 ;
    DROP TEMPORARY TABLE IF EXISTS temptable1;
    END $$
    
    DELIMITER ;
    Il problema è il seguente:

    con il ciclo 1 ottengo un ciclo composto da due id 25 e 26

    dentro allottment ho questo:

    id_htl dal al quantita
    25 2007-01-07 00:00:00 2007-01-20 00:00:00 30
    25 2007-01-20 00:00:00 2007-01-31 00:00:00 15
    25 2007-02-01 00:00:00 2007-02-15 00:00:00 10
    25 2007-02-15 00:00:00 2007-02-25 00:00:00 2
    26 2007-02-09 00:00:00 2007-02-26 00:00:00 2
    26 2007-02-05 00:00:00 2007-02-09 00:00:00 5

    QUindi per come la SP è strutturata dovrei avere 4 righe come risultato con queste date:

    CALL test10('2007-01-25','2007-01-27')
    invece me ne trovo solo 2 riferite a ID 25

    se invece cambio ordine del cursore cur1 in questo modo:

    DECLARE cur1 CURSOR FOR SELECT ID FROM hotel order by id desc;

    Ottengo le 2 righe dell ID 26 anche se vuote...

    quindi... sembra che la SP si blocchi sul primo ciclo...
    come posso ovviare ?


  2. #2
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427
    up

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.