Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Никита Козин 27.06.2006 15:24
Задача. Написать скрипт, принимающий POST-данными пять таб-разделенных таблиц и добавляет их в базу данных, предварительно очистив старые данные в базе. Возвращать статус операции.@auto[] $response:body[] $response:status(210) $die(0) $data[ $.ts[^create[ts](1)[id cat_ts cat_ts2 cena_h cena_min]] $.cat_ts[^create[cat_ts](2)[id name]] $.cat_ts2[^create[cat_ts2](3)[id id_cat name inprice]] $.harak[^create[harak](4)[id cat_ts name ed]] $.harakdb[^create[harakdb](5)[id idts catts idhar value]] ] ^debug:print[$data][/../temp/data.html] # end @auto[] @create[name;status;columns] ^if(!$die){ $result[^table::create{$columns}] ^try{ ^result.join[^table::create{^taint[as-is][$form:[$name]]}] ^if(!^result.count[]){ $response:status(420 + $status) $die(1) }{ ^MAIN:pSQL.void{TRUNCATE TABLE $name} ^insert[$name;$columns;$result] } }{ $exception.handled(0) $response:status(520 + $status) $die(1) } } # end @create[] @insert[table_name;columns;data][n] $counter(0) ^while($counter < ^data.count[]){ ^MAIN:pSQL.void{ INSERT INTO $table_name ( ^columns.menu{$columns.piece}[,] ) VALUES ^for[i](0;99){ ^if(($counter + $i) < ^data.count[]){ ^data.offset[set]($counter + $i) ( ^columns.menu{'$data.[$columns.piece]'}[,] ) ^if(^data.line[] < ^data.count[] && $i < 99){,} } } } ^counter.inc(100) } # end @insert[]Проблема. В одной из таблиц ~7500 записей. Не хватает памяти на процесс. (Разбивка на порции с while, против menu, помогла, но не сильно. Все равно не хватает памяти.