04.10.2018 17:05
kamres
 
Помогите, пожалуйста, с запросом для изменения колонки ACCEPTED со значения 2 на 1, для списка артикулов например 000045, 000046, 000047 таблицы SMCARD

пытаюсь так

UPDATE SMCARD
SET ACCEPTED = 1
WHERE ARTICLE = 000045
AND ARTICLE = 000046
AND ARTICLE = 000047;

не получается, подскажите пожалуйста как правильно.
04.10.2018 17:10
OlegON
 
Цитата:
kamres ARTICLE = 000045
AND ARTICLE = 000046
AND ARTICLE = 000047
обновляешь те строки, где артикул одновременно и 45, и 46, и 47... а таких, подозреваю, нет.
надо обновлять, где артикул 45 или 46 или 47, т.е. OR

а зачем ты, кстати, так делаешь?
04.10.2018 17:25
m1n1mal
 
Можно еще использовать "IN"
UPDATE SMCARD
SET ACCEPTED = 1
WHERE ARTICLE IN (000045, 000046, 000047);
04.10.2018 17:55
OlegON
 
IN, во-первых, тормознее, а во-вторых, я не обратил внимание, но ARTICLE - строковой, т.е. надо '000045', в кавычки писать.
05.10.2018 09:41
kamres
 
Цитата:
OlegON а зачем ты, кстати, так делаешь?
Один человек (читать редиска) перевел в исключенные 29867 карточек, сделав вывод о том, что они находятся без движения и остатка несколько лет, не взяв в расчет остатки и движения в других местах хранения, часть активировали ручками, осталось 28740 карточек,
попробовал так
Код:
UPDATE SMCARD
SET ACCEPTED = 1
WHERE ARTICLE IN ('000045', '000046', '000047', и все необходимые артикулы);
выдало
Код:
ORA-01795: maximum number of expressions in a list is 1000
пробую так
Код:
UPDATE SMCARD
SET ACCEPTED = 1
WHERE ARTICLE = '000045'
OR ARTICLE ='000046' 
OR ARTICLE ='000047';
обновляет, добавляю все оставшиеся артикулы, запускаю, перестает работать служба "OracleServise", в alert.log ошибок нет, делаю все из dbForge последней версии, не на сервере на клиентской машине.
05.10.2018 09:54
Mtirt
 
Код:
ORA-01795: maximum number of expressions in a list is 1000
Означает, что оракл хочет список список значений не более 1000 элементов.
Т.е. надо делать запрос 29 раз.

А все остальное - скорее всего забыли закоммитить изменения.

Самый хороший способ разобраться с вашей проблемой в условие in добавить подзапрос, который из журнала изменения карточек товаров отберет нужные артикула.
Код:
UPDATE SMCARD
SET ACCEPTED = 1
WHERE ARTICLE IN ( select distinct article from SMCARDSECURITYLOG where actioncode=4 and to_date(eventtime, 'DD.MM.YY')=to_date('01.10.2018', 'DD.MM.YY'))
05.10.2018 09:57
kamres
 
Цитата:
kamres делаю все из dbForge последней версии, не на сервере на клиентской машине.
в dbForge выдает
Код:
Соединение было закрыто из-за ошибки 'ORA-03113: end-of-file on communication channel'.
Повторюсь в алерте на сервере ошибок нет.

Разделил запрос на части, по меньше артикулов, все получилось
Код:
Запрос.sql: 731 Строки обновлена [3,658c]
Запрос.sql: DML выполнен успешно [0,001c]
Запрос.sql: 2863 Строки обновлена [10,528c]
Запрос.sql: DML выполнен успешно [0,003c]
Запрос.sql: 11348 Строки обновлена [51,771c]
Запрос.sql: DML выполнен успешно [0,011c]
Запрос.sql: 7303 Строки обновлена [38,594c]
Запрос.sql: DML выполнен успешно [0,008c]
Запрос.sql: 6488 Строки обновлена [30,256c]
Запрос.sql: DML выполнен успешно [0,006c]
05.10.2018 09:59
kamres
 
Использовал такой
Код:
UPDATE SMCARD
SET ACCEPTED = 1
WHERE ARTICLE = '000045'
OR ARTICLE ='000046' 
OR ARTICLE ='000047';
05.10.2018 09:59
Occul
 
Цитата:
kamres перестает работать служба "OracleServise"
Service, сервис это, а не сервиз :) Что значит "перестает работать"? может, просто задумывается?

как вариант - внести все нужные артикулы в отдельную табличку, с ней и сравнивать.
05.10.2018 10:00
Occul
 
Цитата:
kamres Повторюсь в алерте на сервере ошибок нет.
значит, подох клиент или сетка
Часовой пояс GMT +3, время: 11:18.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.