Народ, нужна помощь! Что не так в работе с генераторами в Firebird. Проблема вот в чем: есть процедура, которая должна установить одинаковое начальное значение всем генераторам БД, имена этих генераторов выбираем из системной таблицы, а потом просим исполнить стейтмент. Все нормально, ошибок нет. Но только вот незадача - значения генераторов не изменяются, если просто запустить процедуру и прокоммитить. А если сделать тоже в дебаге - все нормально и все меняется... мистика
вот скриптика кусочек:
for select rdb$generators.rdb$generator_name from rdb$generators where rdb$generators.rdb$system_flag is null
into :sval
do
begin
s='SET GENERATOR ' || sval || ' TO 900000';
execute statement s;
end
end
Работа с генераторами и их инициализация
-
- Сообщения: 2
- Зарегистрирован: 16 окт 2007, 16:46
-
- Сообщения: 2
- Зарегистрирован: 16 окт 2007, 16:46
Может автор имел ввиду что-то из этой оперы:WildSery писал(а):Учи SQL. Нет такой команды "SET GENERATOR".
"...Значение генератора можно переустановить при помощи оператора DDL
SET GENERATOR generatorname TO value;
Однако вы не сможете использовать такое выражение в теле триггера или хранимой процедуры, т.к. там можно использовать только операторы DML (а не DDL)....(http://www.sql.ru/docs/interbase/generator.shtml) )
но все теперь у меня работает через команду execute в хранимой процедуре а проблема была в том, что со строками внимательнее работать надо и их преобразованием(в том числе и скрытым). А вот и кусочек:
Код: Выделить всё
CREATE PROCEDURE SET_GEN_START (
IVAL INTEGER)
AS
DECLARE VARIABLE SVAL CHAR(31) CHARACTER SET UNICODE_FSS;
DECLARE VARIABLE IVAL_I VARCHAR(20);[/b]
DECLARE VARIABLE S VARCHAR(200);
DECLARE VARIABLE SS VARCHAR(80);
begin
for select rdb$generators.rdb$generator_name from rdb$generators where rdb$generators.rdb$system_flag is null
into :sval
do begin
ss='';
s='';
ss=cast(sval as varchar(100));
ival_i=cast(ival as varchar(20));
s='SET GENERATOR ' || ss || ' TO ' || ival_i ;
execute statement s;
end
end
execute statement в руках начинающего опаснее водородной бомбы]
проверено - все работает )