2014-11-03 2 views
1

я следующий тузд сценария:Возврат ошибки от запроса до окончания его

start transaction; 
set autocommit = 0; 
call RollbackRemove(1, 10); 
call RollbackRemove(2, 5000); 
commit; 

и процедуры:

create procedure RollbackRemove(a INT, b NUMERIC(8, 0)) 
begin 
    declare ret bool; 
    select Remove(a, b) into ret; 
    if not ret then 
     rollback; 
    end if; 
end // 

Он пытается удалить определенную сумму с каждого пункта, и если один удалить не удается, транзакция откатывается (внутри процедуры). Тем не менее, я заметил, что даже после вызова отката сценарий продолжает выполнение, но это нежелательно. Также я хотел бы сообщить об ошибке (это будет вызвано из php). Я искал механизм, который раньше закончил бы скрипт, что-то вроде return на других языках, но ничего не нашел. Что я должен использовать в такой ситуации?

+0

Вы можете использовать [exit()] (http://php.net/manual/en/function.exit.php). –

+0

Все ли в MySQL? –

+0

возможно этот: http://stackoverflow.com/a/1275431/650405? ugly as ... –

ответ

1

Возможно, вы можете использовать SIGNAL, чтобы поднять ошибку.

+0

это останавливает сценарий? –

+0

, если вы вызываете ошибку, она завершает процедуру. Если вы поднимете предупреждение, нет. – mgaido

+0

Благодарим вас за оперативную реакцию, решение заключалось в том, чтобы поставить процедуру 'SIGNAL SQLSTATE '45000'' в откате в процедуре, это оставит базу данных в состоянии до транзакции и завершит скрипт, а также создаст ошибку, именно то, что мне нужно. – Raven

Смежные вопросы