Может кто-то знает почему savepoint не работает в FB 2.1
-
- Сообщения: 3
- Зарегистрирован: 13 мар 2008, 11:07
Может кто-то знает почему savepoint не работает в FB 2.1
Я раньпе работаал на IB 7.5, хочу перейти на FB 2.1 но не могу понять почему не работает SAVEPOINT. Вроде ещё в FB 1.5 было заявлено о том что оно работает...
Может что-то поменяли в синтаксисе?
Создание простой процедуры типа
[code]CREATE PROCEDURE TEST1(
LINENUM INTEGER
)
AS
BEGIN
SAVEPOINT A1;
INSERT INTO MAINCONST(ORGCODE) VALUES (1);
RALLBACK TO A1;
EXIT;
END
;[/code]
Выдаёт сообщение
Invalid token.Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 6, column 3.
SAVEPOINT.
Transaction rolled back.
Может что-то поменяли в синтаксисе?
Создание простой процедуры типа
[code]CREATE PROCEDURE TEST1(
LINENUM INTEGER
)
AS
BEGIN
SAVEPOINT A1;
INSERT INTO MAINCONST(ORGCODE) VALUES (1);
RALLBACK TO A1;
EXIT;
END
;[/code]
Выдаёт сообщение
Invalid token.Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 6, column 3.
SAVEPOINT.
Transaction rolled back.
Re: Может кто-то знает почему savepoint не работает в FB 2.1
Может что-то почитать в документации ?SpaceFlyer писал(а):Я раньпе работаал на IB 7.5, хочу перейти на FB 2.1 но не могу понять почему не работает SAVEPOINT. Вроде ещё в FB 1.5 было заявлено о том что оно работает...
Может что-то поменяли в синтаксисе?
Re: Может кто-то знает почему savepoint не работает в FB 2.1
?RALLBACK TO A1;
-
- Сообщения: 3
- Зарегистрирован: 13 мар 2008, 11:07
Может кто-то знает почему savepoint не работает в FB 2.1
Я прочёл, доку
2. User savepoints are not supported in PSQL. Use traditional PSQL
exception handling to undo changes performed in stored procedures
and triggers. Support of user savepoints in PSQL layer would break
the concept of statement atomicity (including procedure call statements).
Each SQL/PSQL statement is executed under automatic system savepoint
and either complete successfully or ALL its changes are rolled
back and exception is raised. Each PSQL exception handling block is
also bounded by automatic system savepoints.
Из выше сказаного могу ли я сделать вывод, что если я вызову процедуру
как показано ниже, то я могу быть уверен, что все изменения сделаные в процедуре P1 будут откачены назад, в случае ошибки.
BEGIN
EXECUTE PROCEDURE P1;
WHEN ANY DO
A=1;
END
END
2. User savepoints are not supported in PSQL. Use traditional PSQL
exception handling to undo changes performed in stored procedures
and triggers. Support of user savepoints in PSQL layer would break
the concept of statement atomicity (including procedure call statements).
Each SQL/PSQL statement is executed under automatic system savepoint
and either complete successfully or ALL its changes are rolled
back and exception is raised. Each PSQL exception handling block is
also bounded by automatic system savepoints.
Из выше сказаного могу ли я сделать вывод, что если я вызову процедуру
как показано ниже, то я могу быть уверен, что все изменения сделаные в процедуре P1 будут откачены назад, в случае ошибки.
BEGIN
EXECUTE PROCEDURE P1;
WHEN ANY DO
A=1;
END
END
-
- Сообщения: 3
- Зарегистрирован: 13 мар 2008, 11:07
Может кто-то знает почему savepoint не работает в FB 2.1
Проверил сам всё работает по следуещему алгоритму
procedure test
as
begin
EXECUTE PROCEDURE P2;
BEGIN
EXECUTE PROCEDURE P1;
WHEN ANY DO
A=1;
END
end
если в процедуре P1 появился exception, то
всё изменения выполненые в процедуре P1 откатываются,
а изменения в P1 сохраняются.
procedure test
as
begin
EXECUTE PROCEDURE P2;
BEGIN
EXECUTE PROCEDURE P1;
WHEN ANY DO
A=1;
END
end
если в процедуре P1 появился exception, то
всё изменения выполненые в процедуре P1 откатываются,
а изменения в P1 сохраняются.
а нафига ты там пишешь when any, т.е. таким образом "гасишь" exception???если в процедуре P1 появился exception, то
всё изменения выполненые в процедуре P1 откатываются,
а изменения в P1 сохраняются.
если тебе надо чтобы все откатывалось само-собой, то не пиши ничего лишнего. ни when, ни savepoint.
Вот, блин, тоже, любители экзотики