Запрос TRANSACTION в SQL Server

Пытаюсь написать SQL скрипт для букинга в ресторане. Весь код доступен по ссылке снизу.

В данном запросе хочу создать хранимую процедуру для вставки новых записей для посетителей ресторана. В ней следует использовать TRANSACTION, чтобы проверить посещал ли этот человек раньше. Двойные записи людей не допускаются.

Почему выдает ошибку?

DELIMITER //
create procedure create_new_reservation (in tableID int, in startTime datetime, in endTime datetime, in reservationTime datetime, out bookingID int)
begin
    declare exit handler for sqlexception, not found, sqlwarning

    if reservationTime is null then
        set creationTime = NOW();
    end if;

    /* XXX bookingID is always 0 and then returns 1. */
    set @lastID = (select bookingID from Booking LIMIT 1);

    if @lastID is null then
        set bookingID = 1;
    else
        set bookingID = (@lastID + 1);
    end if;

    begin
        rollback;
        get diagnostics condition 1 @`errno` = MYSQL_ERRNO, @`sqlstate` = RETURNED_SQLSTATE, @`text` = MESSAGE_TEXT;
        set @full_error = CONCAT('ERROR ', @`errno`, ' (', @`sqlstate`, '): ', @`text`);

        select @`full_error`, @`errno`, @`sqlstate`, @`text`;
    end;

    start transaction;
        set @available = (select isAvailable from pubTable where pubtable.tableID=tableID);
        if @available = 0 then
            /* XXX Does not warn on any failure, the error reporting code does not work! */
            insert into Booking values (@bookingID, tableID, startTime, endTime, reservationTime);
        else
            /* XXX Possibly causes issues with the returned value? */
            #select CONCAT('ERROR table with id ', tableID, ' is occupied');
            rollback;
        end if;
    commit;
    select @reservationID;
end//
DELIMITER ;

полный скрипт:http://sqlfiddle.com/#!18/91ab1/1


Ответы (0 шт):