powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проверка наличия строки перед обновлением.
5 сообщений из 5, страница 1 из 1
Проверка наличия строки перед обновлением.
    #38727736
Фотография ss25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не пойму почему перед обновлением не добавляется отсутствующая строка в таблице.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE TABLE alfa (
    id integer NOT NULL,
    c_pbl integer DEFAULT 0 NOT NULL,
    c_aut integer DEFAULT 0 NOT NULL,
    c_kwd integer DEFAULT 0 NOT NULL,
    c_prl integer DEFAULT 0 NOT NULL,
    CONSTRAINT alfa_c_art_check CHECK ((c_pbl >= 0)),
    CONSTRAINT alfa_c_aut_check CHECK ((c_aut >= 0)),
    CONSTRAINT alfa_c_jrn_check CHECK ((c_prl >= 0)),
    CONSTRAINT alfa_c_kwd_check CHECK ((c_kwd >= 0))
);


CREATE TRIGGER trg_b_iud BEFORE INSERT OR DELETE OR UPDATE ON alfa FOR EACH ROW EXECUTE PROCEDURE trg_ba_iud()




Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
DECLARE
 _id        INT4;
BEGIN

-- Проверка наличия значения перед обновлением
IF TG_WHEN = 'BEFORE' AND TG_OP = 'UPDATE' THEN
 SELECT id FROM alfa WHERE id = NEW.id INTO _id;
 IF NOT FOUND THEN
  INSERT INTO alfa (id) VALUES (NEW.id);
 END IF;
END IF;

IF TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN
  RETURN NEW;
ELSE
  RETURN OLD;
END IF;

END;
...
Рейтинг: 0 / 0
Проверка наличия строки перед обновлением.
    #38727748
Фотография ss25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На данный момент не пойму почему тригер не срабатывает для несуществующих значений.

Это так и должно быть?
...
Рейтинг: 0 / 0
Проверка наличия строки перед обновлением.
    #38727765
дык этта
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ss25На данный момент не пойму почему тригер не срабатывает для несуществующих значений.

Это так и должно быть?триггер "на каждую запись" срабатывает при изменении записи
т.е. если существует объект "запись" и происходит событие "изменение"
ответьте себе -- изменение какой [существующей] записи в вашем случае происходит ?
...
Рейтинг: 0 / 0
Проверка наличия строки перед обновлением.
    #38728266
Фотография ss25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уже понял что не получится эмуляции UPSERT. Думал что перед попыткой апдейта строки тригер созданый как FOR EACH ROW должен запустится. FOR EACH STATEMANT не подходят поскольку там нету OLD NEW.
...
Рейтинг: 0 / 0
Проверка наличия строки перед обновлением.
    #38728273
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ss25, upsert рисуют над инсертом. (и вызывают его как insert, а не update).

в среднем update может быть указано гораздо меньше полей, чем нужно. с инсертами это тоже случается, но гораздо реже.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проверка наличия строки перед обновлением.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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