| Новости | 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, помогла, но не сильно. Все равно не хватает памяти.