powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Скрипт update or insert по изменению только
25 сообщений из 102, страница 3 из 5
Скрипт update or insert по изменению только
    #38861049
laby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисlaby,

глобальная временная таблица http://www.firebirdsql.org/file/documentation/release_notes/html/rlsnotes217.html#rnfb210-globaltemp Данные в ней существуют только на время транзакции или коннекта. Делай эту таблицу такой же структуры как твой dbf. Просто переливаешь туда данные. А потом в какой нибудь хранимой процедуре они у тебя копируются в нормальную табличку с отсечением дубликатов, обновлением полей и удалением.

Зачем же мне dbf - Я лучше сделаю ту же структуру что у меня.
Но GTT чтото сложновато, может простую сделать ...
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38861054
laby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисlaby,

А потом в какой нибудь хранимой процедуре они у тебя копируются в нормальную табличку с отсечением дубликатов, обновлением полей и удалением.

Как раз надо отсечь не дубликаты, а наоборот старые которых в новой нет.
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38861058
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
laby,

лучше GTT. В общем-то она не сложнее обычной таблицы.
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38861060
laby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисlaby,

Просто переливаешь туда данные. А потом в какой нибудь хранимой процедуре они у тебя копируются в нормальную табличку с отсечением дубликатов, обновлением полей и удалением.

то есть от merge отказаться???
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38861066
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
laby,

почему? Тут просто задача разбивается на два этапа. Сначала льёшь данные в GTT. А потом из этой GTT обработку делаешь и распихиваешь свои данные в обычную таблицу(ы). А уж каким способом это делать merge или не merge пофиг. Но если учитывать что ты собираешься удалять по не совпадению, то тут одним merge не обойдёшься.
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38861067
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
labyто есть от merge отказаться???

Ну тебе уже раньше советовали хранимую процедуру писать или execute block пользовать ;) Откуда ж мы знаем, что для тебя и твоей задачи лучше? Нам за это денег не платят ;)
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38861069
laby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GTT лажа какая-то индексы не создаются не фига
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38861073
laby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисlaby,

почему? Тут просто задача разбивается на два этапа. Сначала льёшь данные в GTT. А потом из этой GTT обработку делаешь и распихиваешь свои данные в обычную таблицу(ы). А уж каким способом это делать merge или не merge пофиг. Но если учитывать что ты собираешься удалять по не совпадению, то тут одним merge не обойдёшься.

Вот я потом и собираюсь в моей временной-поверенной таблице смотреть, если нет такой записи, то удалять. Но в GTT индекс мне не создало так что я не знаю, как без индексов смотреть
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38861092
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
laby,

не гони. Индексы там прекрасно создаются. Кинь сюда скрипт создания GTT и индекса к ней
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38861102
laby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисlaby,

не гони. Индексы там прекрасно создаются. Кинь сюда скрипт создания GTT и индекса к ней

Хорошо, гоню. Виноват. Каюсь.
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38861119
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
labyмне потом надо будет удалить все записи, которых в новой редакции нет.
Такого merge даже в тройке не умеет. В Оракуле merge такое умеет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38861521
laby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создание таблицы без ошибок, а при добавлении пишет типа не знает таблицу, хотя создание индексов и триггеров тоже не ругается, знает а insert не знает. В ibexpert тоже знает и insert ...

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
    qryWrite.Transaction.StartTransaction;
    qryWrite.SQL.Clear;
    qryWrite.SQL.Append(
      'CREATE GLOBAL TEMPORARY TABLE KLADR_DOM_NEW (' +
        'ID_KLADR_DOM            D_ID_MAIN NOT NULL,' +
        'KLADR_DOM_ID_REGIONS    D_SMALLINT,' +
        'KLADR_DOM_ADDRESS_CODE  D_ID_MAIN,' +
        'KLADR_DOM_NAME          D_NAME,' +
        'KLADR_DOM_ABBREV_LEVEL  D_SMALLINT,' +
        'KLADR_DOM_ID_ABBREV     D_SMALLINT,');
    qryWrite.SQL.Append(
        'KLADR_DOM_UNO           D_SMALLINT DEFAULT 0,' +
        'KLADR_DOM_GNINMB        D_SMALLINT DEFAULT 0,' +
        'KLADR_DOM_INDEX         D_INTEGER ,' +
        'KLADR_DOM_OCATO0        D_INTEGER ,' +
        'KLADR_DOM_OCATO1        D_INTEGER ,' +
        'KLADR_DOM_OCATO2        D_INTEGER ,' +
        'KLADR_DOM_OCATO3        D_INTEGER);');

    qryWrite.ExecQuery;

    qryWrite.SQL.Clear;
    qryWrite.SQL.Append('insert into KLADR_DOM_NEW (KLADR_DOM_ID_REGIONS, KLADR_DOM_ADDRESS_CODE, KLADR_DOM_NAME,KLADR_DOM_ABBREV_LEVEL, KLADR_DOM_ID_ABBREV, KLADR_DOM_UNO,KLADR_DOM_GNINMB, KLADR_DOM_INDEX, KLADR_DOM_OCATO0,KLADR_DOM_OCATO1, KLADR_DOM_OCATO2, KLADR_DOM_OCATO3)' );
    qryWrite.SQL.Append('values (1,  10000000, ''двлд45,двлд43,двлд41,двлд39,двлд37'', 6, 1, 0, 105, 385000, 79, 401, 0, 0)');
    qryWrite.ExecQuery;



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
---------------------------
Debugger Exception Notification
---------------------------
Project netdbs_2010.exe raised exception class EFIBInterBaseError with message 'fmMain.fmKLADRImport.qryWrite:
Can't format message 13:796 -- message file D:\Proj\firebird.msg not found.
Dynamic SQL Error.
SQL error code = -204.
Table unknown.
KLADR_DOM_NEW.
At line 1, column 13.
'.
---------------------------
Break   Continue   Help   
---------------------------
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38861527
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
laby,

после create table надо commit транзакции сделать. иначе ее до этого момента нет, и вставлять данные некуда.
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38861529
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
laby,
комита нет

зы.
создай один раз таблицу и используй её когда надо

ззы. работа с GTT ничем не отличается от работы с обыкновенными таблицами
есть только один нюанс: данные "исчезают" либо по завершению транзакции,
либо по завершению коннекта
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38861530
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
laby,

блин на кой чёрт тебе создвать таблицу из программы. Создай её 1 раз в IBE, да и индексы сразу. Структура КЛАДРА так часто не меняется.
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38861533
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
laby
Код: pascal
1.
2.
3.
4.
    qryWrite.SQL.Clear;
    qryWrite.SQL.Append('insert into KLADR_DOM_NEW (KLADR_DOM_ID_REGIONS, KLADR_DOM_ADDRESS_CODE, KLADR_DOM_NAME,KLADR_DOM_ABBREV_LEVEL, KLADR_DOM_ID_ABBREV, KLADR_DOM_UNO,KLADR_DOM_GNINMB, KLADR_DOM_INDEX, KLADR_DOM_OCATO0,KLADR_DOM_OCATO1, KLADR_DOM_OCATO2, KLADR_DOM_OCATO3)' );
    qryWrite.SQL.Append('values (1,  10000000, ''двлд45,двлд43,двлд41,двлд39,двлд37'', 6, 1, 0, 105, 385000, 79, 401, 0, 0)');
   qryWrite.ExecQuery;




Этак у тебя импорт данных долго проходить будет. Используй параметры.
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38861535
laby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисlaby,

блин на кой чёрт тебе создвать таблицу из программы. Создай её 1 раз в IBE, да и индексы сразу. Структура КЛАДРА так часто не меняется.

Ну сами же сказали что надо ее создать в одной транзакции, и никто не заметит, что она была )
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38861538
laby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисlaby
Код: pascal
1.
2.
3.
4.
    qryWrite.SQL.Clear;
    qryWrite.SQL.Append('insert into KLADR_DOM_NEW (KLADR_DOM_ID_REGIONS, KLADR_DOM_ADDRESS_CODE, KLADR_DOM_NAME,KLADR_DOM_ABBREV_LEVEL, KLADR_DOM_ID_ABBREV, KLADR_DOM_UNO,KLADR_DOM_GNINMB, KLADR_DOM_INDEX, KLADR_DOM_OCATO0,KLADR_DOM_OCATO1, KLADR_DOM_OCATO2, KLADR_DOM_OCATO3)' );
    qryWrite.SQL.Append('values (1,  10000000, ''двлд45,двлд43,двлд41,двлд39,двлд37'', 6, 1, 0, 105, 385000, 79, 401, 0, 0)');
   qryWrite.ExecQuery;




Этак у тебя импорт данных долго проходить будет. Используй параметры.

Какие еще параметры? Наоборот я сразу уже пишу, а так еще параметры будут присваиваться
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38861546
laby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m7mlaby,
комита нет

зы.
создай один раз таблицу и используй её когда надо

ззы. работа с GTT ничем не отличается от работы с обыкновенными таблицами
есть только один нюанс: данные "исчезают" либо по завершению транзакции,
либо по завершению коннекта

Тогда это не временная таблица, а таблица с временными данными, типа я идиот не знаю конструкции delete from
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38861547
Фотография zirra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
laby> Какие еще параметры? Наоборот я сразу уже пишу, а так еще параметры будут присваиваться


--
Vladimir A.Bakhvaloff
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38861552
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
laby,

похоже ты не понял что такое GTT. Это такая же постоянная структура с точки зрения метаданных, только сами данные в ней временные. Поэтому не надо каждый раз её создавать и грохать.

Про параметры ты не прав. Разница будет в разы.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
qryWrite.SQL.Clear;
qryWrite.SQL.Append('insert into KLADR_DOM_NEW (KLADR_DOM_ID_REGIONS, KLADR_DOM_ADDRESS_CODE, KLADR_DOM_NAME,KLADR_DOM_ABBREV_LEVEL, KLADR_DOM_ID_ABBREV, KLADR_DOM_UNO,KLADR_DOM_GNINMB, KLADR_DOM_INDEX, KLADR_DOM_OCATO0,KLADR_DOM_OCATO1, KLADR_DOM_OCATO2, KLADR_DOM_OCATO3)' );
qryWrite.SQL.Append('values (:KLADR_DOM_ID_REGIONS, :KLADR_DOM_ADDRESS_CODE, :KLADR_DOM_NAME, :KLADR_DOM_ABBREV_LEVEL, :KLADR_DOM_ID_ABBREV, :KLADR_DOM_UNO, :KLADR_DOM_GNINMB, :KLADR_DOM_INDEX, :KLADR_DOM_OCATO0, :KLADR_DOM_OCATO1, :KLADR_DOM_OCATO2, :KLADR_DOM_OCATO3)');
qryWrite.Prepare;
dbfTable.Open;
while not dbfTable.Eof do
begin
  qryWrite.ParamByName('KLADR_DOM_ID_REGIONS').AsInteger := dbfTable.FieldByName('KLADR_DOM_ID_REGIONS').AsInteger;
....
  qryWrite.ExecQuery;
  dbfTable.Next;
end;
dbfTable.Close;



если использовать неименованные параметры будет ещё быстрее
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38861555
laby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисlaby,

похоже ты не понял что такое GTT. Это такая же постоянная структура с точки зрения метаданных, только сами данные в ней временные. Поэтому не надо каждый раз её создавать и грохать.

Про параметры ты не прав. Разница будет в разы.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
qryWrite.SQL.Clear;
qryWrite.SQL.Append('insert into KLADR_DOM_NEW (KLADR_DOM_ID_REGIONS, KLADR_DOM_ADDRESS_CODE, KLADR_DOM_NAME,KLADR_DOM_ABBREV_LEVEL, KLADR_DOM_ID_ABBREV, KLADR_DOM_UNO,KLADR_DOM_GNINMB, KLADR_DOM_INDEX, KLADR_DOM_OCATO0,KLADR_DOM_OCATO1, KLADR_DOM_OCATO2, KLADR_DOM_OCATO3)' );
qryWrite.SQL.Append('values (:KLADR_DOM_ID_REGIONS, :KLADR_DOM_ADDRESS_CODE, :KLADR_DOM_NAME, :KLADR_DOM_ABBREV_LEVEL, :KLADR_DOM_ID_ABBREV, :KLADR_DOM_UNO, :KLADR_DOM_GNINMB, :KLADR_DOM_INDEX, :KLADR_DOM_OCATO0, :KLADR_DOM_OCATO1, :KLADR_DOM_OCATO2, :KLADR_DOM_OCATO3)');
qryWrite.Prepare;
dbfTable.Open;
while not dbfTable.Eof do
begin
  qryWrite.ParamByName('KLADR_DOM_ID_REGIONS').AsInteger := dbfTable.FieldByName('KLADR_DOM_ID_REGIONS').AsInteger;
....
  qryWrite.ExecQuery;
  dbfTable.Next;
end;
dbfTable.Close;



если использовать неименованные параметры будет ещё быстрее

За счет чего будет разница??? Разве не sql-запрос будет выполняться на сервере который я написал, будет нечто волшебное - параметры гурьбой полетят на сервер?
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38861559
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
laby,

FB все запросы выполняет в два этапа. Сначала поисходит подготовка запроса (prepare) в это время разбирается текст запроса парсером и он преобразуется в BLR, оптимизатор вычисляет план, может ещё чего то делается. Потом собствено выполнение запроса. Если у тебя запрос без параметров, то обе фазы происходят на каждую запись. В случае параметризованаого запроса, подготовка запроса выполняется всего один раз.
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38861563
laby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или вы хотите сказать, что 4 миллииона qryWrite.SQL.Append долго выполняются??? Да 10 секунд!
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38861569
laby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисlaby,

FB все запросы выполняет в два этапа. Сначала поисходит подготовка запроса (prepare) в это время разбирается текст запроса парсером и он преобразуется в BLR, оптимизатор вычисляет план, может ещё чего то делается. Потом собствено выполнение запроса. Если у тебя запрос без параметров, то обе фазы происходят на каждую запись. В случае параметризованаого запроса, подготовка запроса выполняется всего один раз.

Ну не знаю, когда я делал update or insert через параметры циклом выполнялось в 2 раза дольше, чем сразу огромный текст подготовил и скриптом выполнил без всяких параметров ...
...
Рейтинг: 0 / 0
25 сообщений из 102, страница 3 из 5
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Скрипт update or insert по изменению только
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]