| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Oracle > Вставка записей 1 раз в месяц |
| Автор: Kbl4AH 7.5.2009, 10:15 | ||
| Здравствуйте, возник следующий вопрос. Есть таблица которая хранит данные за месяцы... При наступлении нового месяца в таблицу должны вставиться записи с данными из предыдущего месяца... Я делаю так... При старте программы выполняю это:
Но это совсем криво, т.к. программа может быть запущена за месяц до 1000 раз, а вставка записей осуществится только в самый первый раз... Зря только БД напрягаться будет... Возможно ли как-то по-другому решить эту проблему? |
| Автор: DimW 7.5.2009, 10:22 |
| так проблема в чем? организовать инсерт только один раз? |
| Автор: azesmcar 7.5.2009, 10:24 |
| 1. Удалять из другой таблицы данные после копирования (или устанавливать флаг и обновлять после копирования) 2. Хранить дату последнего копирования где нибудь (например в регистрах) и не запускать если данные уже скопированы Ну а вы что хотели, само копирование уже как-то криво Зачем нужно в базе иметь дубликаты тех же самых записей если не секрет? |
| Автор: Роман 7.5.2009, 10:34 |
| Может имеется ввиду: кроном запускать скрипт раз в месяц? |
| Автор: Kbl4AH 7.5.2009, 10:38 | ||||||
да, оптимально организовать инсерт один раз в месяц...
а где здесь другая таблица?
а в многопользовательском случае?
почему криво? затем что есть, например, перечень позиций и цен на месяц... на новый месяц эти цены тоже нужны и они равны предыдущим, а если несколько цен изменилось, то пользователь их отредактирует... так что не совсем дубликаты получаются, хотя бы потому, что тот же месяц (и иногда цены; и иногда сам перечень может измениться) - различный... |
| Автор: DimW 7.5.2009, 10:42 |
только не кроном а http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_job.htm |
| Автор: azesmcar 7.5.2009, 10:44 | ||
я думал в другую копируется - неверно понял HKEY_CURRENT_USER
Ясно, но я бы установил тригер на UPDATE цен и дублировал во время изменений. |
| Автор: DimW 7.5.2009, 10:44 |
см. DBMS_JOB |
| Автор: Kbl4AH 7.5.2009, 10:44 |
| DimW, не понял к чему твой код :( может... я не знаю, вот и спрашиваю... Смысл в том, что у меня запрос и коммит будет выполнятся 1000 (сколько раз стартанет прога) раз за месяц, а я хочу чтобы только один раз... То есть мне нужна, наверное, реализация средствами самой БД, а не моей клиентской программой... то есть наступил новый месяц, данные сами вставились не зависимо от того сколько раз и была ли вообще запущена прога... |
| Автор: DimW 7.5.2009, 10:46 |
всмысле? |
| Автор: Kbl4AH 7.5.2009, 10:47 | ||
наверное, недопонимаю, но так не пойдет... какой апдейт, если записей на месяц апдейта еще не существует в таблице? |
| Автор: azesmcar 7.5.2009, 10:47 | ||
| DimW Ну он же спросил как хранить в регистрах если программа используется разными пользователями. Добавлено через 1 минуту и 36 секунд
ну так они есть для предыдущего..зачем хранить ту же самую строку в базе? как только она изменится, тогда для истории дублируйте старую, а пока цена неизменна нахрена вам ее дублировать? Может я задачу не полностью представляю, но никак не могу представить ситуацию когда это нужно. |
| Автор: DimW 7.5.2009, 10:50 | ||||
я дал ссылку, изучите ее. просто альтернатива вашим MAX(dt) Добавлено через 2 минуты и 57 секунд
а, имеется ввиду хранение на клиентской стороне. на мой взгляд тоже не ахти. |
| Автор: azesmcar 7.5.2009, 11:00 | ||
ну я вообще считаю что в это задаче копирование раз в месяц ни к чему.. это конечно гуд, но на мой взгляд использовать это надо в основном для архиваций и других вещей которые не связаны с основным процессом работы программы (могут быть исключения, но это не тот случай). Во всяком случае на данном этапе знакомства с задачей у меня такое мнение |
| Автор: Kbl4AH 7.5.2009, 11:00 | ||||
так компы разные...
май бананас - 3р огурец - 5р помидор - 7р июнь огурец - 5р помидор - 8р июль тыква - 15р как тут триггер на апдейт использовать? спасибо, но, наверное, оставлю как есть... я думал может просто есть какой-нибудь элегантный и не сложный способ в БД... у меня все даты представляют из себя 1-е числа месяца... |
| Автор: Zloxa 7.5.2009, 11:04 | ||
|
| Автор: azesmcar 7.5.2009, 11:06 | ||||||
Я бы хранил так
например повысили цены на банан, после этого таблица будет иметь следующий вид
Когда показываем цены - выбираем те, у которых дата больше с помощью группировки. |
| Автор: Zloxa 7.5.2009, 11:17 | ||||
Kbl4AH, Советую таки потратить время и изучить.... Это и есть "элегантный и не сложный" способ куда уж проще?:
И будет у тебя оно работать первого числа каждого месяца в час ночи. Только посмотри что у тебя в http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/initparams.htm#REFRN10077 написано Добавлено через 7 минут и 56 секунд Блин, сорри... когда увидил цифру 7, не обратил внимание где запятая стоит, думал семерка относится к делфе..... Не знаю есть ли жоб в семере... Наверняка есть... но так же ли работает... не знаю :(( |
| Автор: Kbl4AH 7.5.2009, 11:46 |
| Zloxa, azesmcar, DimW, Роман, спасибо! |