2015-03-05 3 views
0
SET TERM^; 
CREATE PROCEDURE ljudjee 
AS 
DECLARE VARIABLE i integer=1; 
DECLARE VARIABLE d integer; 
DECLARE VARIABLE e integer; 
DECLARE VARIABLE star integer; 
BEGIN 
while (i <= 1000000) do 
begin 
    d=((rand()*99999)+1); 
    e=((rand()*99999)+1); 
    star=((rand()*50)+18); 
    insert into ljudje values (:i,'Ime','Priimek',:star,:d,:e); 
    i = i + 1; 
    END 
END^ 
SET TERM ;^

Ну, я не получаю никаких ошибок из этого кода при его выполнении. Кажется, что все в порядке, но когда я пытаюсь ВЫПОЛНИТЬ ПРОЦЕДУРА, он не работает. Также нет ошибок, но время выполнения процедуры берет навсегда и фактически ничего не делает. Это должно быть что-то неправильно с функцией rand(), которую я, вероятно, неправильно использовал. Есть идеи? Также в таблицу не включаются записи. Вовсе нет.Синтаксис случайного целого числа Firebird

+0

Вы увидите записи в таблице, только если процедура выполнена правильно. Либо есть ошибка, либо процедура прекращается, и никакие записи не попадают в таблицу. Попробуйте уменьшить количество итераций до 10. Остается ли процедура? –

+0

Процедура работает, если я поместил счет в 10. Это не значит, что если значение поместить в 1000000. Я оставляю его один на 30 минут, но ничего не делает. Он должен быть выполнен в считанные секунды. –

+0

Что произойдет, если вы выполните это в транзакции 'NO WAIT'? –

ответ

0

Если вы не нашли проблему. Вы вставляете миллион записей в одну транзакцию. Вы не увидите некоторых из них. Это все или ничего. Возможно, ваша база данных не настроена правильно с точки зрения кеширования и размеров страниц. Часто быстрее отбрасывать индексы, делать вставки и создавать индексы.

0

Попробуйте использовать trunc():

d = trunc((rand() * 99999) + 1); 
e = trunc((rand() * 99999) + 1); 
star = trunc((rand() * 50) + 18); 
Смежные вопросы