powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Изменить если есть, создать если нет
23 сообщений из 23, страница 1 из 1
Изменить если есть, создать если нет
    #38787516
Aleks_006
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно ли такое реализовать: если запись с таким id уже есть, прибавить 1 к полю "Количество"; если нет, то создать запись. InterBase 6.5
...
Рейтинг: 0 / 0
Изменить если есть, создать если нет
    #38787541
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks_006InterBase 6.5
Тупо: http://ibase.ru/devinfo/testiu.htm
Для реальных систем с приличной нагрузкой:
http://www.sql.ru/forum/964534/hranimye-agregaty-bez-konfliktov-i-blokirovok-recept
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Изменить если есть, создать если нет
    #38787556
Aleks_006
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Будет ли работать, если id формируется генератором и в insert'е не пишется?
И вообще пока не сообразил, как её под себя сделать. Пока такое намутил:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE PROCEDURE ins_tov AS DECLARE VARIABLE :ID INTEGER;
BEGIN
FOR SELECT id_knigi FROM postavka INTO :ID DO
IF (EXISTS(SELECT id_knigi FROM tovar WHERE id_knigi=:ID)) THEN
UPDATE tovar T SET kolichestvo=kolichestvo+1 WHERE id_knigi=:ID;
ELSE
INSERT INTO tovar(nazvanie_knigi,cena_knigi,kolichestvo) VALUES(:ID);
END;


Сейчас ругается на точку с запятой (если убрать - на BEGIN)
...
Рейтинг: 0 / 0
Изменить если есть, создать если нет
    #38787559
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо, даже я знаю про SET TERM.
...
Рейтинг: 0 / 0
Изменить если есть, создать если нет
    #38787561
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks_006,

в DECLARE перед именем переменной двоеточие ставить не надо
...
Рейтинг: 0 / 0
Изменить если есть, создать если нет
    #38787563
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovВидимо, даже я знаю про SET TERM.
А ещё ты наверняка умеешь посчитать до трёх. В отличии от.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Изменить если есть, создать если нет
    #38787564
Aleks_006
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да есть у меня SET TERM.
Возможно, я тупой, но пока не понял, что именно надо считать до трёх.
А в UPDATE была буква T - для чего?
...
Рейтинг: 0 / 0
Изменить если есть, создать если нет
    #38787575
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks_006Возможно, я тупой
и как обычно документацию не читающий. Но тебе таки придётся это преодолеть.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Изменить если есть, создать если нет
    #38787594
Aleks_006
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Описание по ссылке? Читал. У меня задачи чуть другие, да и вообще, я меня пока что-то с синтаксисом, надо хотя бы это поправить. На begin продолжает ругаться.
...
Рейтинг: 0 / 0
Изменить если есть, создать если нет
    #38787599
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks_006,

ты моё сообщение прочёл?
...
Рейтинг: 0 / 0
Изменить если есть, создать если нет
    #38787601
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks_006InterBase 6.5

по какой причине используется это старьё?
...
Рейтинг: 0 / 0
Изменить если есть, создать если нет
    #38787606
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks_006Описание по ссылке?
Нет, синтаксис языка PSQL в Language Reference, который лежит в каталоге Doc твоего сервера.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Изменить если есть, создать если нет
    #38787617
Aleks_006
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Дениспо какой причине используется это старьё?
С ходу не нашёл новее, либо были какие-то проблемы с установкой. Firebird вообще не пробовал, просто привык к консоли на учёбе и менять неохота.
Двоеточие убрал, на ошибку не влияет.
Документацию сейчас почитаю тогда.
...
Рейтинг: 0 / 0
Изменить если есть, создать если нет
    #38787625
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks_006Firebird вообще не пробовал, просто привык к консоли на учёбе и менять
неохота.
"Чо?.." (с)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Изменить если есть, создать если нет
    #38787626
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks_006,

InterBase 6.5 платный, Firebird - нет.

Про какой консоль речь? Про IBСonsole что ли. Если да то к этому говну лучше не привыкать.
...
Рейтинг: 0 / 0
Изменить если есть, создать если нет
    #38787853
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovДля реальных систем с приличной нагрузкой:Описанное там решение подходит для агрегатов с уже существующими ID.
Задача автора умрёт, если условие "нет записи" будет возникать достаточно часто.
В процедуре на вставку нужно писать обработку исключения на случай, если такую запись уже вставила конкурирующая транзакция, и вставлять уже с увеличением сплиттера, как добавка к существующей.
...
Рейтинг: 0 / 0
Изменить если есть, создать если нет
    #38787857
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery,

И даже в этом случае надо ещё обыграть ситуацию, когда та самая конкурирующая "передумала" вставлять основную запись.
(это касается алгоритма "свёртки")
...
Рейтинг: 0 / 0
Изменить если есть, создать если нет
    #38788007
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryЗадача автора умрёт, если условие "нет записи" будет возникать достаточно
часто.
"Чо?.."
С каких это пор инсерту не пофиг наличие других записей с таким же значением в одном из
полей и что заставит его умереть?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Изменить если есть, создать если нет
    #38788029
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

С самого начала, когда констрейнты на уникальность появились.
...
Рейтинг: 0 / 0
Изменить если есть, создать если нет
    #38788034
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каков вопрос - таков ответ. Расширять конкретную ситуацию до общих вопросов не надо было :)
Можно, конечно, валить в таблицу дубли без разбора и констрейнтов, но просто мне не нравится так. Вот такое моё субъективное мнение.
...
Рейтинг: 0 / 0
Изменить если есть, создать если нет
    #38788035
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryС самого начала, когда констрейнты на уникальность появились.
Ну тогда это просто счастье, что в схеме, которую ты пытаешься критиковать, они нигде не
используются.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Изменить если есть, создать если нет
    #38788095
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Особенно, если учесть, что автору нужно всего лишь MERGE для tovar и postavka
...
Рейтинг: 0 / 0
Изменить если есть, создать если нет
    #38788104
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryОсобенно, если учесть, что автору нужно всего лишь MERGE для tovar и
postavka
И давно MERGE перестало выбрасывать update conflict?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Изменить если есть, создать если нет
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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