Слияние баз

Администрирование баз данных (Pervasive.SQL, MS SQL, Oracle, утилита Support)

Модераторы: m0p3e, edward_K, Модераторы

Ответить
ALEKS123
Местный житель
Сообщения: 278
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Слияние баз

Сообщение ALEKS123 »

Уважаемые коллеги! Очень нужны ваши светлые головы, знания и опыт! Опишу суть проблемы. М.б. получится несколько длинновато, но уж простите.... Дело в следующем. Есть 4 галактические базы, которые долгое время функционировали каждая сама по себе - со своими каталогами (ОС, сотрудники, МЦ и проч.). Так было. Но вот настал момент, что теперь необходимо эти все базы слить в единую. И тут возникает несколько вопросов, как сделать:
1. Как сделать так, чтобы в каждой базе были свои номера офисов - 1, 2, 3, 4. Сейчас у каждой базы он "номер 1". Т.е. Как сделать, чтобы в каждом NRECe всех записей в каждой базе стоял свой номер офиса? Т.е. как в 4-ое слева знакоместо поставить соответствующую цифирь - 1, 2, 3, 4. Например, NREC имеет вид 4001303193855D8Eh. Нужно вместо 4-ой "1" поставить, например, "3" (3 номер офиса).
(прод. следует)
ALEKS123
Местный житель
Сообщения: 278
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Re: Слияние баз (продолжение)

Сообщение ALEKS123 »

2. Если пункт номер 1 можно сделать, то, эту операцию - операцию корректировки NRECа нужно провести по всем записям типа COMP. И здесь есть второй вопрос - как, пробегая по словарю, определить тип записи, т.е. найти записи типа COMP?

Заренне всем благодарен за ЛЮБЫЕ мысли по этому поводу.

PS. CORPO никогда не пользовались и пользоваться не будем, работаем с удаленных терминалах.
Grom
Местный житель
Сообщения: 276
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Северо-Запад Много

Re: Слияние баз (продолжение)

Сообщение Grom »

1. "Например, NREC имеет вид 4001303193855D8Eh". Проведём с ним побитовую логическую операцию 4001303193855D8Eh AND 0FFF0FFFFFFFFFFFFh = 4000303193855D8Eh. Проведём с результатом побитовую логическую операцию 4000303193855D8Eh OR 0003000000000000h = 4003303193855D8Eh. Получили то что требовалось. Хотя это вроде очевидные вещи (для программистов). ;)
Подход к делу: СДЕЛАЛ и ... ЗАБЫЛ, а ОНО пусть САМО работает (не люблю возвращаться и повторяться).
LARA
Постоянный обитатель
Сообщения: 173
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск
Контактная информация:

ЛЮБЫЕ мысли по этому поводу

Сообщение LARA »

Ко 2 пункту.
(может это прописные истины, но все же)
Есть такая таблица, X$FIELDS называется, за номер 2 по порядку. Вот там и лежат описания всех полей которые встречаются в Галке.
параметр значение
Номер таблицы 2
Имя X$FIELDS
Местоположение DICT
Основной файл Field.adf
Файл-продолжение DICT

№ имя поля заголовок поля тип size
1 XE$CODE Код поля Word 2
2 XE$FILECODE Код таблицы Word 2
3 XE$NAME Идентификатор поля String 21
4 XE$TITLE Заголовок поля String 41
5 XE$DATATYPE Тип поля Byte 1
6 XE$OFFSET Смещение в записи Word 2
7 XE$SIZE Размер поля Word 2
8 XE$DEC Кол. десятичных знаков после точки Byte 1
9 XE$ATTR Атрибуты Word 2

т е интересующие поля имеют тип 17, из таблицы за номером XE$FILECODE, наименование таблицы к которой относится поле можно взять из табл 1 X$FILES.
Если долго мучится, что-нибудь получится. :))) ОБЯЗАТЕЛЬНО!!!!!!!
ALEKS123
Местный житель
Сообщения: 278
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Re: Спасибо

Сообщение ALEKS123 »

Для Grom. Спасибо, просветил. Правда про побитовые операции я знаю уже лет 30. Одна загвоздочка..Попробуй сделать все что предлагаешь с данными типа COMP (не в теории). Свой первый вопрос снимаю, т.к. знаю как это сделать. Правда не так как предлагает Grom.
Для Lara. Спасибо, Ларочка. С этими двумя таблицами все понятно... Проблема в том, что полоей типа COMP около 1500. И со всеми необходимо делать одну и ту же операцию... Вот как сделать, чобы в VIPe можно было передавать имена, т.е .сделать макроподстановку....
coolibin
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 29 мар 2005, 17:49

мысли разбегаются

Сообщение coolibin »

надеюсь, понимаешь, что сливать-то не все базы придется? поэтому нада для начала их список сформировать.
еще. чтобы не было проблем со ссылочной целостностью можно перед операцией избавиться от dict\relate.adf
ALEKS123
Местный житель
Сообщения: 278
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Re: мысли разбегаются

Сообщение ALEKS123 »

ДА понятно, Coolibin, что не все базы (таблицы).... Всего около 400....
coolibin
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 29 мар 2005, 17:49

Re: мысли разбегаются

Сообщение coolibin »

тогда, если ты знаешь как добраться до списка полей по фильтру x$files.XE$DATATYPE=17, тогда просто фейсом сгенери лот (оччень длинный) или набор лотов с командами update.
можно не заниматься побитовой ерундой, а превратить comp - в текст, заменить один символ на нужный номер офиса и обратно превратить в comp
coolibin
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 29 мар 2005, 17:49

Re: мысли разбегаются

Сообщение coolibin »

update <tabla>
set pole := comp(
substr(string(pole),1,3)
+'новый номер'
+substr(string(pole,5,20)))
количество команд будет равно количеству полей из x$fields
можно в принципе сгенерить один апдейт на все комп-поля таблицы. тада будет по количеству таблиц.
ALEKS123
Местный житель
Сообщения: 278
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Re: мысли разбегаются

Сообщение ALEKS123 »

Спасибо за участие....
dkms
Постоянный гость
Сообщения: 60
Зарегистрирован: 29 мар 2005, 17:49

Re: мысли разбегаются

Сообщение dkms »

Всё немножко посложнее - никто не обещал уникальности значений nrec по всем таблицам базы :(
coolibin
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 29 мар 2005, 17:49

Re: мысли разбегаются

Сообщение coolibin »

Dkms, это ты о чем?
dkms
Постоянный гость
Сообщения: 60
Зарегистрирован: 29 мар 2005, 17:49

Re: Dkms, это ты о чем?

Сообщение dkms »

Об уникальности значений в полях nrec. :o
Ответить