powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Подскажите одним update ом можно решит Firebird 3?
25 сообщений из 30, страница 1 из 2
Подскажите одним update ом можно решит Firebird 3?
    #39276221
RADSeatle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем
Есть таблица справочник клиенты и поля isdefault (по умолчание "да" "нет" ) значение "да" должен быть только один раз остальное 0

Как обновить эту полю одним update ом

Пример инсертил
Клиент А по умоланию нет
Клиент Б по умоланию да
Клиент С по умоланию да //теперь оставить только эту клиент по умолчанию да остальние сделать нет

Редактировал запись
Клиент A по умоланию да //теперь оставить только эту клиент по умолчанию да остальние сделать нет
...
Рейтинг: 0 / 0
Подскажите одним update ом можно решит Firebird 3?
    #39276223
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RADSeatleКак обновить эту полю одним update ом
Сначала пойти к тому, кто эту БД проектировал, взять за грудки и долго посмотреть в глаза.

Потом открыть документацию по функции CASE.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите одним update ом можно решит Firebird 3?
    #39276230
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Dimitry Sibiryakov!
You wrote on 19 июля 2016 г. 13:26:30:

Dimitry Sibiryakov> Потом открыть документацию по функции CASE.
если я правильно понял задачу (в чем я совсем не уверен), то уму нужно блокировать
всю таблицу на момент insert/update
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите одним update ом можно решит Firebird 3?
    #39276236
Гхостик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отдельную таблицу default_client с одной записью завести не предлагать?
...
Рейтинг: 0 / 0
Подскажите одним update ом можно решит Firebird 3?
    #39276255
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийто уму нужно блокировать всю таблицу на момент insert/update

Всю - не надо. Update сам заблокирует нужные записи.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите одним update ом можно решит Firebird 3?
    #39276265
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov> Потом открыть документацию по функции CASE.

А чего не так-то? Нормальная задача, если я правильно её понял.
И case не нужен, достаточно двух отдельных запросов или подзапроса.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите одним update ом можно решит Firebird 3?
    #39276272
RADSeatle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да пока с проверкой так делаю

if isdef='да'
update set=нет;
update set=да where idclient=:pclientid;


хотелос с одним апдейтом
...
Рейтинг: 0 / 0
Подскажите одним update ом можно решит Firebird 3?
    #39276295
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RADSeatle, так чтоль?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
EXECUTE BLOCK (clientId BIGINT NOT NULL)
AS
BEGIN
  UPDATE clients
    SET isDefault = Iif(Id = :clientId, 'Y', 'N')
    WHERE isDefault = 'Y' OR Id = :clientId
END
...
Рейтинг: 0 / 0
Подскажите одним update ом можно решит Firebird 3?
    #39276322
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нестандартный Iif вместо CASE ещё ладно, но EXECUTE BLOCK тут зачем?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите одним update ом можно решит Firebird 3?
    #39276329
RADSeatle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо огромное
...
Рейтинг: 0 / 0
Подскажите одним update ом можно решит Firebird 3?
    #39276331
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а может это на триггер повесить ?

Код: sql
1.
2.
3.
4.
5.
BEFORE UPDATE or INSERT

  if NEW.IsDefault then
     UPDATE TABLE1 SET IsDefault=False
        WHERE ID <> NEW.ID and IsDefault
...
Рейтинг: 0 / 0
Подскажите одним update ом можно решит Firebird 3?
    #39276336
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамНестандартный Iif вместо CASE ещё ладно, но EXECUTE BLOCK тут зачем?


видимо потому, что дельфийские компоненты нервно относяться к повторению параметров с одинаковым именем, для этого он параметр вытащил в определение блока
...
Рейтинг: 0 / 0
Подскажите одним update ом можно решит Firebird 3?
    #39276426
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch, на BEFORE триггер не получится. Нельзя в этом триггере вносить изменения в ту же таблицу на которую повешен триггер.
...
Рейтинг: 0 / 0
Подскажите одним update ом можно решит Firebird 3?
    #39276432
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devна BEFORE триггер не получится. Нельзя в этом триггере вносить изменения в ту же таблицу
на которую повешен триггер.

Оракул запрещает?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите одним update ом можно решит Firebird 3?
    #39276433
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамно EXECUTE BLOCK тут зачем?В общем-то, Arioch прав на счет встречающихся глюков в некоторых компонентах доступа к данным при дублировании имен параметров. Пусть будет EXECUTE BLOCK с "интерфейсом" параметров - так надежнее.
...
Рейтинг: 0 / 0
Подскажите одним update ом можно решит Firebird 3?
    #39276442
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev> Нельзя в этом триггере вносить изменения
rdb_dev> в ту же таблицу на которую повешен триггер.

Кто запрещает? В FB нет ораклового запрета про мутацию.

rdb_dev> встречающихся глюков в некоторых компонентах
rdb_dev> доступа к данным при дублировании имен параметров.

Может, ты даже сможешь назвать их? :)
А чего не два параметра, например
(если там вообще параметр нужен)?
И почему EB, а не ХП ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите одним update ом можно решит Firebird 3?
    #39276454
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамМожет, ты даже сможешь назвать их? :)
Я могу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите одним update ом можно решит Firebird 3?
    #39276458
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамКто запрещает? В FB нет ораклового запрета про мутацию.Пока еще ни разу не знаком с oracle db, а про подобный запрет читал где-то в книгах или статьях по FB (то ли у Хелен, то ли на ibase.ru, точно не вспомню). И даже как-то натыкался на ошибку компиляции триггера BEFORE при использовании изменения той же таблицы.

Гаджимурадов РустамМожет, ты даже сможешь назвать их? :)
А чего не два параметра, например
(если там вообще параметр нужен)?Легко! попробуй использовать "чистый" API самого fbclient.dll и посмотри сколько prepare вернет параметров. ;)

Гаджимурадов РустамИ почему EB, а не ХП ?Я не настаиваю на использовании исключительно EXECUTE BLOCK. Если ТС'у захочется использовать ХП - пожалуйста! Я не против... А если кому-то просто хочется потроллить на ровном месте, я также не против, но ответ на троллинг не гарантирую.
...
Рейтинг: 0 / 0
Подскажите одним update ом можно решит Firebird 3?
    #39276464
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev а про подобный запрет читал где-то в книгах или статьях по FB (то ли у Хелен, то ли на ibase.ru, точно не вспомню).

не было там такого. Ты наверное путаешь с другим случаем когда кто-то там пытался считать записи и не позволять вставить больше какого-то количества, или попытка проверки уникальности в триггере. Эта штуковина реально не правильно работает в многопользовательских приложениях. Но ни какого запрета при этом нет.
...
Рейтинг: 0 / 0
Подскажите одним update ом можно решит Firebird 3?
    #39276495
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

вообще, за апдейт ВСЕЙ таблицы при изменении ОДНОЙ записи надо руки отрубать.
...
Рейтинг: 0 / 0
Подскажите одним update ом можно решит Firebird 3?
    #39276502
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

согласен. Правильным решением было бы заведение ещё одной таблицы с 1 записью которая бы хранила код клиента, который является клиентом по умолчанию.
...
Рейтинг: 0 / 0
Подскажите одним update ом можно решит Firebird 3?
    #39276515
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov> Я могу.

В твоём списке больше одного элемента? :)

rdb_dev> про подобный запрет читал где-то в книгах или статьях по FB
rdb_dev> (то ли у Хелен, то ли на ibase.ru, точно не вспомню).
rdb_dev> И даже как-то натыкался на ошибку компиляции триггера
rdb_dev> BEFORE при использовании изменения той же таблицы.


Это ты сильно задвинул. Хелен такого написать не могла,
а Дима столько не выпьет. И уж точно такого сообщения
об ошибке в природе не существует. Как оно звучало-то,
"cannot update same table bcz patamushta" ?

> посмотри сколько prepare вернет параметров. ;)

И? Баг в чём?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите одним update ом можно решит Firebird 3?
    #39276516
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv> вообще, за апдейт ВСЕЙ таблицы при изменении ОДНОЙ записи надо руки отрубать.

Так задачу так изначально стоит, при чём же тут скрипач.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите одним update ом можно решит Firebird 3?
    #39276552
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvArioch,

вообще, за апдейт ВСЕЙ таблицы при изменении ОДНОЙ записи надо руки отрубать.

там вообще-то WHERE стоит, и если описанная бизнес-логика выдерживается, то будет тронута одна единственная запись
...
Рейтинг: 0 / 0
Подскажите одним update ом можно решит Firebird 3?
    #39276555
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Плюс триггера - потом можно будет таки завести отдельную таблицу Current_Default_Client, а поле IsDefault сделать вычислимым, совместимости со старыми читающими запросами ради
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Подскажите одним update ом можно решит Firebird 3?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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