Проверьте значение при вставке - PullRequest
1 голос
/ 06 апреля 2010

У меня есть три таблицы.

Table: Item
Columns: ItemID, Title, Content, NoChange (Date)

Table: Tag
Columns: TagID, Title

Table: ItemTag
Columns: ItemID, TagID

В таблице элементов есть поле с NoChange, если это поле = true, тег не может вставлять значение ItemTag с этим ItemID. Как я могу проверить это во вставке?

Для обновлений у меня есть это заявление:

UPDATE ItemTag SET TagID = ? where ItemID = ? 
AND TagID = ? AND exists (
select ItemID from Item where ItemID = ? AND NoChange is null)");

Спасибо.

Ответы [ 2 ]

0 голосов
/ 06 апреля 2010

Вы можете использовать запрос-синтаксис оператора вставки:

INSERT INTO ItemTag (TagID, ItemID) ВЫБРАТЬ?,? ОТ элемента, где itemid =? и nochange равен нулю

где первый параметр - ваш tagid, а 2-й и 3-й - ваш itemid.

0 голосов
/ 06 апреля 2010

Оператор вставки не принимает условия :

INSERT INTO table [ ( column [, ...] ) ]
    { DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }
    [ RETURNING * | output_expression [ AS output_name ] [, ...] ]

Что вы можете сделать, это добавить триггер, чтобы проверить, выполнены ли условия, и либо откатить транзакцию, либо пропустить вставку ( триггер должен вернуть ноль ).

Вы также можете написать относительно простую процедуру plpgsql (которая была бы моим выбором, если бы я действительно хотел выполнить эту проверку на уровне базы данных).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...