|
перенос таблиц
|
|||
---|---|---|---|
#18+
Есть таблица Продажи в БД FoxPro код_товара/код_покупателя 1/111 1/112 1/223 2/222 2/114 3/444 Также есть таблица prodaji в БД Oracle: kod/kod_tov/kod_p и таблица jurnal в БД Oracle: kod/oper kod-первичный ключ, должен формироваться наподобии счетчика Мне необходимо данные из таблицы продажи БД FoxPro перенести в таблицу prodaji БД Oracle, при этом при переносе нужно формировать kod и занести его сначала в таблицу jurnal, а потом в таблицу prodaji Результат должен быть наподобии(напр, если в таблице jurnal уже было 11 записей): kod/kod_tov/kod_p 12/1/111 12/1/112 12/1/223 13/2/222 13/2/114 14/3/444 Подключаюсь к БД Oracle и выбираю все значения поля kod =SQLEXEC(lnConn,'select kod from prodaji order by kod desc', "k_pr") Запоминаю последний kod(для того чтобы затем его увеличить на 1) If Used("k_pr") then k0=k_pr.kod EndIf выбираю данные из таблицы Продажи БД FoxPro, которые необходимо перенести: select * from продажи into cursor prod Дальше не могу сообразить. Помогите пожалуйста ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2010, 14:22 |
|
перенос таблиц
|
|||
---|---|---|---|
#18+
> Автор: MARGARITA23 Я не работал с ораклом, но в микрософте есть DTS с помощью которого легко перегоняю в базу разные ексельные файлы, дбф-ки для последующей обработки. > Мне необходимо данные из таблицы продажи БД FoxPro перенести в таблицу prodaji БД Oracle, при этом при переносе > нужно формировать kod и занести его сначала в таблицу jurnal, а потом в таблицу prodaji Это не правильно. При многопользовательской вставке в эту таблицу будут проблемы с уникальностью. Для MSSQL, FireBird я сделал бы так: стартуем транзакцию вставляем запись в таблицу prodaji получаем код вставленной записи вставляем запись в таблицу jurnal комитим транзакцию если на каком-то этапе происходит ошибка, делаем ролбек и помечаем исходную запись как необработанную переходим к следующей записи и начинаем со старта транзакции После прохода по всем записям отбираем необработанные и анализируем причины ошибок Это если нужно програмно и нет прав в базе > Подключаюсь к БД Oracle и выбираю все значения поля kod > =SQLEXEC(lnConn,'select kod from prodaji order by kod desc', "k_pr") > Запоминаю последний kod(для того чтобы затем его увеличить на 1) > If Used("k_pr") then > k0=k_pr.kod > EndIf Ты опять забыла об указателе текущей записи. Он не обязательно будет на первой записи, это раз. А два, этим запросом ты тянешь в программу все записи из таблицы prodaji ради одной цифры. На больших объемах данных в таблице это будет очень заметно. К тому-же самостоятельная генерация первичного ключа - дело гиблое и неправильное. В оракле есть механизм поддержки автоинкремента для первичного ключа( я не знаю как этот механизм называется ) и давно отработаны методы получения этого значения на клиента. А ты пытаешся взять на себя часть функций сервера. Это не правильно. Как только твоя программа попадет в многопользовательскую среду, она перестанет работать с таким подходом. > выбираю данные из таблицы Продажи БД FoxPro, которые необходимо перенести: > select * from продажи into cursor prod > Дальше не могу сообразить. Помогите пожалуйста Для MSSQL, FireBird с правами на создание тригера я сделал бы так: сделал бы тригер на после-вставки(обновления/удаления) для таблицы prodaji, который-бы вставлял в таблицу jurnal информацию о коде обрабатываемой записи и тип операции. Потом сделал бы встывку данных в таблицу prodaji. Я не пойму это разовая необходимость или делается постоянное решение импорта? Если разовая, делал бы тригер(хотя такой тригер у меня был-бы изначально и постоянно ), если постоянная то делал бы по первому варианту. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2010, 14:51 |
|
|
start [/forum/topic.php?fid=41&fpage=99&tid=1585343]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 125ms |
0 / 0 |