powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Очень медленно работает UPDATE
97 сообщений из 97, показаны все 4 страниц
Очень медленно работает UPDATE
    #38602535
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!

скажите как лучше всего решить задачу.
В общем нужно обновить в одной таблице одно поле. записей примерно 10.5 млн строк. весь базы 1,2гб (будет еще больше, а обновлять это поле нужно периодически).
Что сам делал. Подключаюсь к базе через ADO. Выполняю следующий запрос
$query = 'UPDATE "Coupons" SET "Active" = 0 WHERE "Code" =' & $sLine, но работает очень медленно :( Примерно 6-7 секунд за одну запись :(
так же пробовал через RecordSet
While Not $adoRs.EOF
$adoRs.Fields("Active").Value = 0
$adoRs.Fields("UpdateData").Value = $DataTimeNow
$adoRs.Update
$adoRs.MoveNext
WEnd
$adoRs.Close

то же самое :(

знатоки подскажите, как лучше реализовать данную задачу. сам уже выбился из сил... если кинете еще и маленький примерчик, очень буду благодарен!
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602556
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQL, какой тип поля у Code? По нему есть индекс?
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602560
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тип поля Code VARCHAR(100), индекс имеется.
поле Active тип Integer висит тригер так же индекс.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602562
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Придется ддл таблицы и план показать.

А потом этот-же запрос в IBE за сколько выполняется?
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602567
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DLL:

Код: sql
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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
CREATE TABLE "Coupons" (
  "CouponId" TID NOT NULL,
  "Code" "TName" NOT NULL,
  "Active" "TBoolean" DEFAULT 1 NOT NULL,
  "CreateDate" "TDatetime",
  "UpdateDate" "TDatetime");


ALTER TABLE "Coupons" ADD CONSTRAINT "PK_Coupons" PRIMARY KEY ("CouponId");


CREATE INDEX "Coupons_IDX1" ON "Coupons"("Code");

CREATE INDEX "Coupons_IDX2" ON "Coupons"("Active");


SET TERM ^ ;

CREATE TRIGGER "Coupons_BI" FOR "Coupons"
ACTIVE BEFORE INSERT
POSITION 0
as
begin
  if (new."CouponId" is null) then
    new."CouponId" = gen_id("GEN_Coupons_ID",1);
end^

SET TERM ; ^

SET TERM ^ ;

CREATE TRIGGER "Coupons_BI1" FOR "Coupons"
ACTIVE BEFORE INSERT
POSITION 1
AS
begin
  new."CreateDate" = current_timestamp;
  new."UpdateDate" = current_timestamp;
end^

SET TERM ; ^

SET TERM ^ ;

CREATE TRIGGER "Coupons_BU0" FOR "Coupons"
ACTIVE BEFORE UPDATE
POSITION 0
AS
begin
  new."UpdateDate" = current_timestamp;
end^

SET TERM ; ^

...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602574
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А потом этот-же запрос в IBE за сколько выполняется?

Запускал через IBM 2005 for Interbase and Firebird на копии базы.
Тоже очень долго :( не дождался завершения.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602576
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
*IBM 2005 = SQLManager 2005
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602586
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQL,

Код: sql
1.
CREATE INDEX "Coupons_IDX2" ON "Coupons"("Active");


Смущает меня этот индекс
Он точно нужен???
Попробуй без него
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602589
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробовал, убирал его.
не помогло... я сразу начал рыть в сторону индекса на поле Active. но без результатно :(
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602590
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQL*IBM 2005 = SQLManager 2005
Эм... Я про это ibexpert.com/rus/ibe_sfx.exe
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602596
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQL,

что за язык программирования? Версия FB?

по этому коду кажется что нужно обновить одну запись по Code
автор$query = 'UPDATE "Coupons" SET "Active" = 0 WHERE "Code" =' & $sLine
а по этому все записи в таблице Coupons

авторWhile Not $adoRs.EOF
$adoRs.Fields("Active").Value = 0
$adoRs.Fields("UpdateData").Value = $DataTimeNow
$adoRs.Update
$adoRs.MoveNext
WEnd
$adoRs.Close

можно всё таки попонятней озвучить что требуется.
Какова селективность Coupons_IDX1
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602610
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторчто за язык программирования? Версия FB?

подключаюсь через ODBC драйвер. накидал все это дело на AutoIt.
читаю текстовый файл, построчно, значения подставляю в запрос:

Код: autoit
1.
2.
3.
4.
5.
$CountLines = _FileCountLines($PathLoadName & $FileLoadName)
   For $i= 0 To $CountLines Step + 1
	  $count = $count + 1
	  $sLine = FileReadLine($FileLoad)
	  If @error = -1 Then ExitLoop
 	  $query = 'UPDATE "Coupons" SET "Active" = 0 WHERE "Code" =' & $sLine


FB Версия 2.5,


пытаюсь сделать следующее:
в текстовом файле лежат номера разделенные enter'om без пробелов, форматом примерно так:
01234567890
12345678901
23456789012
34567890123
...
их примерно тыс 300.
все это дело я считываю и хочу в базе FB (этим номерам) присвоить значение полю Active = 0

автора по этому все записи в таблице Coupons
я перед этим выбрал Selecto'm нужные мне номера.

З.Ы.без SQL запроса просто считывание строк занимает примерно минуты 2-3.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602612
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добавить поле NCode типа нумерик или интеджер, заполнить, создать индекс и в where использовать его.
ЗЫ варчар100 с индексом - это сомнительный профит.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602614
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQL, проще будет этот файл загрузить во временную таблицу без индексов и работать с ней посредством stored procedure на сервере, чем обрабатывать построчно (это изврат, имхо).
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602617
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQLпытаюсь сделать следующее:
в текстовом файле лежат номера разделенные enter'om без пробелов, форматом примерно так:
01234567890
12345678901
23456789012
34567890123
...
их примерно тыс 300.
все это дело я считываю и хочу в базе FB (этим номерам) присвоить значение полю Active = 0

автора по этому все записи в таблице Coupons
я перед этим выбрал Selecto'm нужные мне номера.

З.Ы.без SQL запроса просто считывание строк занимает примерно минуты 2-3.
пихни все свои номера в отдельную таблицу и сделай
...where "Code" in (select field1 from table1)
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602619
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

согласен. Мы как-то с Таблоидом проверяли скорость через загрузку в промежуточную GTT, а потом из неё в таблицу, в некоторых случаях скорость существенно возрастала
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602622
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roadster,

только не where "Code" in (select field1 from table1), а через MERGE
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602628
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денистолько не where "Code" in (select field1 from table1), а через MERGEчто через мерж? в мачед всё равно как-то надо будет впихнуть селект.
впрочем стоит попробовать и оценить скорость.
хотя не думаю, что мерж будет быстрее простого апдейта.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602645
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roadster,

MERGE позволит развернуть порядок обхода таблиц.
авторwhere "Code" in (select field1 from table1)
Тем более, что для Code в этом случае индекс не может быть применён, а GTT у нас без индесков
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602661
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисMERGE позволит развернуть порядок обхода таблиц.в смысле?
Симонов Денисавторwhere "Code" in (select field1 from table1)
Тем более, что для Code в этом случае индекс не может быть применённу про сомнительный профит от индекса на варчар100 я уже писал, но почему не может быть применён?
Симонов Дениса GTT у нас без индескова там всё равно все значения выбирать.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602677
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roadsterв смысле?
порядок обхода начнётся с GTT. MERGE выполняет RIGHT JOIN с таблицей источником, т.е. она оказывается ведущей.
roadsterну про сомнительный профит от индекса на варчар100 я уже писал
ну здесь я думаю автор от балды воткнул "с запасом". Если подумает, то наверняка выберет приемлемый размер
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602683
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Дениспорядок обхода начнётся с GTT. MERGE выполняет RIGHT JOIN с таблицей источником, т.е. она оказывается ведущей.ну может так и быстрее будет.
Симонов Денисну здесь я думаю автор от балды воткнул "с запасом". Если подумает, то наверняка выберет приемлемый размерсудя по представленному набору входных данных я бы вообще нумерик выбрал бы.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602688
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roadster,

NUMBERIC подошёл бы если бы ведущих нулей не было
автор01234567890
хотя если количество символов для вывода всегда одинаково, то можно и NUMERIC хранить а при выводе дополнять нулями слева до нужной длины
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602695
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисNUMBERIC подошёл бы если бы ведущих нулей не былонадо смотреть логику использования этих данных, собственно от предложения переделать в нумерик меня остановил именно этот первый нолик.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602703
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторзагрузить во временную таблицу

что то типо этого ?

Код: sql
1.
2.
3.
4.
CREATE TABLE TTT(NNN VARCHAR(100) NOT NULL)
BULK INSERT TTT FROM 'C:\file.txt'
WITH (FIRSTROW = 1, ,FIELDTERMINATOR = '\n', ROWTERMINATOR = '\n')
SELECT * FROM TTT
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602713
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQL
Код: sql
1.
SELECT * FROM TTT

использование * рано или поздно отольётся слезами и ненужной работой.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602723
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
roadster,

я всего лишь тестю... после конечно все будет идентифицировано. SELECT "NNN"
через кровь и пот. :(

но а сама структура верная ? пытаюсь ее проверить на IBExpert ругается.
т.е. по идеи это должно же отработать в script редакторе IBExpert ?
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602725
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQL,

нет. Это тебе не MSSQL. В своей программе/скрипте сначала грузишь номера для обновления в GTT TMP_COUPONS_CODES (тут будет только INSERT)

Код: sql
1.
2.
3.
CREATE GLOBAL TEMPORARY TABLE TMP_COUPONS_CODES (
    CODE  VARCHAR(15)
) ON COMMIT DELETE ROWS;



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE PROCEDURE LOAD_COUPONS
AS
BEGIN
  MERGE INTO Coupons
  USING TMP_COUPONS_CODES
  ON TMP_COUPONS_CODES.CODE = Coupons.Code
  WHEN MATCHED THEN
  UPDATE SET 
     Active = 0, 
     UpdateData = CURRENT_TIMESTAMP;
END



а потом запускаешь ХП LOAD_COUPONS

Всё это в 1 транзакции
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602737
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис(тут будет только INSERT)я позволю себе прокомментировать эту фразу.
предлагается на стороне клиента разбирать файл и в цикле инсёртить.
ЗЫ да, это не Oracle
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602741
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, roadster!
You wrote on 2 апреля 2014 г. 11:08:07:

roadster> предлагается на стороне клиента разбирать файл и в цикле инсёртить.
> ЗЫ да, это не Oracle боня, вернись в ПТ.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602797
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийбоня, вернись в ПТ.там скучно было.
а вот теперь здесь стало интересно.
предложишь что-нибудь кроме моего варианта?
ЗЫ екстернал таблес? или я безнадёжно отстал?
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602805
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, roadster!
You wrote on 2 апреля 2014 г. 11:42:26:

roadster> екстернал таблес? пожалуй да.
тем более что у него текстовый файл.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602810
Фотография zirra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roadster> предложишь что-нибудь кроме моего варианта?
> ЗЫ екстернал таблес? или я безнадёжно отстал?
Я бы предложил для начала уйти от AutoIt! и ODBC..
Вещь, конечно, хорошая, но, имхо, совсем для другого...
....
А взять IBEScript, например, и FB Embedded...
....
У меня на cmd + IBEScript был написан могучий импортёр громадных dbf-файлов в FB...


--
Vladimir A.Bakhvaloff
E-Mail: zirra1969<bark>gmail<dot>com

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602893
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийroadster> екстернал таблес? пожалуй да.всё ещё комильфо, я не совсем отстал от жизни с этим чёртовым ораклом?
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602938
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
EXTERNAL нельзя же вроде для временных таблиц.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602948
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, JuniorSQL!
You wrote on 2 апреля 2014 г. 13:09:59:

JuniorSQL> EXTERNAL нельзя же вроде для временных таблиц.
roadster предложил EXTERNAL вместо временных таблиц.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602951
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQLEXTERNAL нельзя же вроде для временных таблиц.а что мешает создать, а потом удалить екстернал?
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602953
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий,
но она потом будет не нужна. т.е. по "оконцове" всех операций эту таблицу удалить ? можно будет ?
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602955
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
roadster,

ок. столько способов, глаза разбегаются :)
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602963
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQLок. столько способов, глаза разбегаются
"и медленно встает" (с)
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602974
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-Сегодня смог, Бэрримор.
-Поздравляю, сэр!
(С)
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602977
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,

да с самого начала было ясно, что "Примерно 6-7 секунд за одну запись" - неправда.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38602985
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvIvan_Pisarevsky,

да с самого начала было ясно, что "Примерно 6-7 секунд за одну запись" - неправда.

в смысле ? не правда что ?
дольше или меньше ?
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603014
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQLв смысле ? не правда что ?
дольше или меньше ?
да потому что в таблице даже с тремя миллиардами (!) записей обновление одной записи по индексу будет идти столько же, сколько и в таблице со 100 записями. Это научный факт. А вы его пытаетесь опровергнуть, причем, обновляя вместо одной записи целые миллионы (или сотни тысяч).
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603129
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
За четыре часа никто так и не обратил внимания, что аффтар совершил глупейшую, недавно обсуждаемую ошибку: не поставил кавычки вокруг строковой константы из-за чего индекс по полю Code шёл лесом.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603136
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

об этом даже как-то не подумалось. Привык всё через параметры делать...
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603201
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я так понял, что если данные в текстовом файле не разделены ";"
то последняя запись отбрасывается ?
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603242
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, JuniorSQL!
You wrote on 2 апреля 2014 г. 16:19:00:

JuniorSQL> я так понял, что если данные в текстовом файле не разделены ";"
> то последняя запись отбрасывается ? ась?
шо?
где?
когда?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603330
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий,

ну вот скрин файла: http://i031.radikal.ru/1404/b3/e29697420de3.jpg
а вот скрин из IBExpert'a: http://s004.radikal.ru/i206/1404/9d/0b7cdbe897e6.jpg

почему последняя строка отсутствует ?
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603379
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
снимается :)

теперь получается если я сделаю:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE PROCEDURE LOAD_COUPONS
AS
BEGIN
  MERGE INTO Coupons
  USING couponsFile
  ON couponsFile.CODE = Coupons.Code
  WHEN MATCHED THEN
  UPDATE SET 
     Active = 0, 
     UpdateData = CURRENT_TIMESTAMP;
END



то все отработает в разы быстрей чем в (0) ? :)
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603703
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
почему то не обновляются записи.
создал процедуру:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
begin
  merge into "Coupons"
  using (select "code" FROM "couponsFile") couponsFile
  on Trim('couponsFile.code') = Trim('Coupons.Code')
  when matched then
      update set
      "Active" = 0;
end



вроде все верно, синт. ошибок нет. процедура отрабатывает но ничего не изменяет. совпадающие номера в таблицах имеются.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603706
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQLпроцедура отрабатывает но ничего не изменяет. совпадающие номера в таблицах имеются.Вы сравниваете не содержимое полей, а строковые литералы. Которые не равны друг другу :-).
Поменяйте апострофы на кавычки. А еще лучше - забудьте про такую практику (создание базы с case-sensitive полями), читать это невозможно.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603708
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таблоид,

"couponsFile.code" = "Coupons.Code", имеете ввиду так ?
но так синт. ошибки.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603713
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQLТаблоид,

"couponsFile.code" = "Coupons.Code", имеете ввиду так ?
но так синт. ошибки.Держите текст этих ошибок в тайне и никогда никому не показывайте.
Не уверен, что прокатит, но попробуйте еще вот так: couponsFile."code" = "Coupons"."Code"
ЗЫ. Весёлый гемор там у вас, с кавычками-то...
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603723
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
опять беда :(

Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
couponsFile.code.
At line 6, column 6.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603729
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
begin
merge into "Coupons"
using "couponsFile"
on Trim("couponsFile"."code") = Trim("Coupons"."Code")
when matched then
update set
"Active" = 0
;
end
вот так отработало, без синтакс. ошибок. но update не отработал.
может быть из за этого, что тип поля couponsFile.code (char), а Coupons.Code (varchar)

http://s019.radikal.ru/i615/1404/f4/edfe0569c524.jpg
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603735
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQL,

couponsFile - это GTT ON COMMIT DELETE ROWS? Если да, то обязательное условие чтобы заливка INSERT и ваша процедура работали в одной транзакции
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603736
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQLupdate не отработал.
может быть из за этого, что тип поля couponsFile.code (char), а Coupons.Code (varchar)Вы можете создать базу "без кавычек" ? Зачем самому себе грабли подкладывать ?
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603743
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторcouponsFile - это GTT ON COMMIT DELETE ROWS? Если да, то обязательное условие чтобы заливка INSERT и ваша процедура работали в одной транзакции

нет, это EXTERNAL.

авторВы можете создать базу "без кавычек" ? Зачем самому себе грабли подкладывать ?

не много поясню. это решение не мое :(
я больше специализирован на решениях на платформе 1с. у нас есть ПО работает с этой базой, мне нужно "сливать" из 1с в FB в эту базу данные, через текстовый файл и так как я тут один, то на меня указали звезды. :( из 1с я на прямых запросах быстро формирую этот файл, а вот залить с той же скоростью в FB уже 3й день не получается.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603744
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQLопять беда :(

Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
couponsFile.code.
At line 6, column 6.и что у вас там за бардак?
то есть кавычки, то нет, алиас совпадает с именем таблицы, регистрозависимость (как уже сказали) мешает читать.
ну и код создания select "code" FROM "couponsFile" неплохо увидеть.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603749
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQLнет, это EXTERNAL.тогда для начала что возвращает из "couponsFile"?
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603751
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
roadster,
авторну и код создания select "code" FROM "couponsFile" неплохо увидеть.
http://s43.radikal.ru/i101/1404/8b/1b8286fce893.jpg
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603754
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603762
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQL,

приведи DDL таблицы couponsFile, а не картинку из IBE.
И ещё в IBE в гриде есть такой пункт по правой клавише мыши как "копировать записи в буфер обмена". Вот так это выгдлядит при вставке

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CODE_AGE	NAME
-1	Неизвестно
1	2
2	2+
3	3
4	3+
5	4
6	4+
7	5
8	5+
9	6+
23	Ст. возраст

Это чтобы скриншоты не выкладывать.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603774
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DDL couponsFile:
SET SQL DIALECT 3;

CREATE TABLE "couponsFile" EXTERNAL 'C:\FILE.TXT' (
"code" CHAR(13),
NEWLINE CHAR(1)
);
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603775
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQL,

ладно.
1C это... круто, поэтому надо помочь.
что возвратит запрос
Код: sql
1.
2.
3.
4.
select count(*)
from "Coupons"
where "Coupons"."Code" in
 (select "couponsFile"."code" FROM "couponsFile")
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603779
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
roadster,

COUNT
0
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603780
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQLNEWLINE CHAR(1)это что? признак какой-то?
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603786
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
roadster]это что? признак какой-то? нет, это для переноса строки в текстовом файле.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603787
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQLroadster,

COUNT
0так получается, что нет у тебя записей в "Coupons" где поле "code" отвечало бы условиям.
ладно, немного преобразуем запрос
Код: sql
1.
2.
3.
4.
select count(*)
from "Coupons"
where UPPER(TRIM("Coupons"."Code")) in
 (select UPPER(TRIM("couponsFile"."code")) FROM "couponsFile")


хотя скорее всего трима хватит
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603797
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и с просто TRIM'om и с UPPER(TRIM())

COUNT
0
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603804
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQLи с просто TRIM'om и с UPPER(TRIM())

COUNT
0нет записей с таким условием, обновлять нечего.
но для верности
Код: sql
1.
2.
3.
4.
5.
6.
select count(*)
from "Coupons"
where TRIM("Coupons"."Code") LIKE '%123456789012%'
     OR TRIM("Coupons"."Code") LIKE '%012345678912%'
     OR TRIM("Coupons"."Code") LIKE '%234567890123%'
     OR TRIM("Coupons"."Code") LIKE '%345678901234%'



PS кокой фигнёй только не займёшься от скуки
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603811
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
:) не знаю что это было, но

COUNT
4
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603823
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQL:) не знаю что это было, но

COUNT
4о хоспади...
в 1С в прямых запросах LIKE не используется что ли?
просто в "Coupons"."Code" нет точного соответствия а есть строки включающие эти циферки, при этом либо до либо после есть иные символы, отличные от пробелов (пробелы тримом отрезаются, если что)
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603827
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQL,

ладно давай так
Код: sql
1.
2.
3.
4.
5.
6.
select "Coupons"."Code"
from "Coupons"
where TRIM("Coupons"."Code") LIKE '%123456789012%'
     OR TRIM("Coupons"."Code") LIKE '%012345678912%'
     OR TRIM("Coupons"."Code") LIKE '%234567890123%'
     OR TRIM("Coupons"."Code") LIKE '%345678901234%'



ЗЫ да штош как скушно0то...
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603830
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я не о LIKE имел ввиду, а то что Count был равен не 0 :)

а теперь и вовсе здорово:
Code
123456789012
012345678912
234567890123
345678901234
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603833
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQLCount был равен не 0подари бубен что ли.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603851
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Trim я уже пробовал, получается там не пробелы.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603862
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQL,

самому интересно стало. Давай вот так

Код: sql
1.
2.
3.
4.
5.
6.
select "Coupons"."Code"
from "Coupons"
where TRIM("Coupons"."Code") = '123456789012'
     OR TRIM("Coupons"."Code") = '012345678912'
     OR TRIM("Coupons"."Code") = '234567890123'
     OR TRIM("Coupons"."Code") = '345678901234'
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603867
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,
угу жуе попробовал.
Code
123456789012
012345678912
234567890123
345678901234

получается, что проблема с таблице couponFile, в поле "code".
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603872
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQL,

теперь всё тоже самое (те же запросы) проделай с couponFile
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603881
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всем пока, мне работу нашли.
пойду поговнокодю.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603882
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот так:
select "couponsFile"."code" from "couponsFile" where TRIM("couponsFile"."code") LIKE '123456789012%'
code
123456789012

а вот так
select "couponsFile"."code" from "couponsFile" where TRIM("couponsFile"."code") LIKE '123456789012%'
ничего не выходит. а как узнать, какой символ идет после 2ки ?
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603886
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сорри опечатка

а вот так
select "couponsFile"."code" from "couponsFile" where TRIM("couponsFile"."code") LIKE '123456789012'
ничего не выходит. а как узнать, какой символ идет после 2ки ?
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603891
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQL,

режь поле с помощью substring.
или удаляй всё, что не цифры.
ЗЫ подозреваю наличие непечатного символа вроде перевода строки и возврата каретки
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603915
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SELECT (SUBSTRING("couponsFile"."code" FROM 1 FOR 13)) From "couponsFile"

так все норм.
SUBSTRING
123456789012
012345678912
234567890123
345678901234
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603934
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот так работает.
begin
merge into "Coupons"
using "couponsFile"
on SUBSTRING("couponsFile"."code" FROM 1 FOR 12) = "Coupons"."Code"
when matched then
update set
"Active" = 0
;
end

О, Боже, темный лес...


З.Ы. roadster, кидай номер ЯД.
вечером отмечусь.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603939
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQL,

значит твой файлик использует в качестве разделителей строк не тоже самое, что внешние таблицы в FB. В винде для разделителя строк обычно используется #13#10. Что используется в FB хз, но подозреваю что только один из этих символов
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38603990
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQLмне нужно "сливать" из 1с в FB в эту базу данныеНу дык и лей напрямую, например через IBProvider, нахрена костыли в виде промежуточных файлов?
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38604011
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_Pisarevsky,

эта база находиться не под рукой и скоростного инета + куча трафика там нет :(
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38604016
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Симонов Денис!
You wrote on 3 апреля 2014 г. 11:47:50:

Симонов Денис> Что используется в FB хз, но подозреваю что только один из этих символов
в FB нет такого понятия применительно к внешним файлам.
вообще.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38604356
Фотография zirra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0xFFJuniorSQL> DDL couponsFile:
> SET SQL DIALECT 3;
> CREATE TABLE "couponsFile" EXTERNAL 'C:\FILE.TXT' (
> "code" CHAR(13),
> NEWLINE CHAR(1)
> );

У меня - температура...

У меня при таком ddl талбица странная получается!..
Код: plaintext
1.
123456789012	3	 [code=plaintext]
 


--
Vladimir A.Bakhvaloff
E-Mail: zirra1969<bark>gmail<dot>com

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38605160
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQLЗ.Ы. roadster, кидай номер ЯД.
вечером отмечусь.нет у меня ЯД.
не надо отмечаться.

ЗЫ опять я в пролёте с бабками, придётся так и жить на одну зарплату.
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38605163
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и ещё по поводу этого
JuniorSQLSELECT (SUBSTRING("couponsFile"."code" FROM 1 FOR 13)) From "couponsFile"если вдруг длина больше или меньше, то будут проблемы, поэтому удалять лишние символы было бы предпочтительнее, ну или замена с использованием replace()
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38605183
stelvic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там скорее всего разделитель строк - 2 символа. Соответственно внешнюю таблицу нужно создавать так-
Код: plsql
1.
2.
3.
4.
CREATE TABLE "couponsFile" EXTERNAL 'C:\FILE.TXT' (
"code" CHAR(13), -- или CHAR(12) нужно просто посчитать количество видимых символов в строке файла. 
NEWLINE CHAR(2)
);
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38605409
Фотография zirra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stelvic> Там скорее всего разделитель строк - 2 символа. Соответственно внешнюю таблицу нужно создавать так-
> CREATE TABLE "couponsFile" EXTERNAL 'C:\FILE.TXT' (
> "code" CHAR(13), -- или CHAR(12) нужно просто посчитать количество видимых символов в строке файла.
> NEWLINE CHAR(2)
> );
А вот ни фига он так не хочет!.. При таком раскладе только null;null получается...

--
Vladimir A.Bakhvaloff
E-Mail: zirra1969<bark>gmail<dot>com

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Очень медленно работает UPDATE
    #38605429
Фотография zirra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zirra> А вот ни фига он так не хочет!.. При таком раскладе только null;null получается...
Я ж сразу говорил, что у меня температура...
База-то в UTF-8... Потому не так и не то читала...

Код: sql
1.
2.
3.
4.
CREATE TABLE COUPONSFILE EXTERNAL 'T:\FILE.TXT' (
    CODE     CHAR(13) CHARACTER SET NONE,
    NEWLINE  CHAR(2) CHARACTER SET NONE
);



--
Vladimir A.Bakhvaloff
E-Mail: zirra1969<bark>gmail<dot>com

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
97 сообщений из 97, показаны все 4 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Очень медленно работает UPDATE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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