Преобразование триггера SQL Server в PostgreSQL вызывает проблемы с функцией триггера - PullRequest
2 голосов
/ 12 июля 2011

Я нахожусь в процессе преобразования существующей БД SQL Server 2005 в БД PostgreSQL 9.0.

До сих пор все работало нормально.Я хочу перевести триггер SQL в PostgreSQL, но у меня проблема с функцией триггера.

Я не знаю, как реализовать временную таблицу inserted в синтаксисе PostgreSQL.В SQL Server таблица inserted существует, но отсутствует в PostgreSQL.Есть идеи?

Мой код (PostgreSQL):

CREATE OR REPLACE FUNCTION func_co_insert()

  RETURNS trigger AS

$BODY$begin

  declare

  aa bigint;

begin

  select aa = co_id from inserted;

  update com03 set co_creationdate = CURRENT_TIMESTAMP,

  co_creationby = USER where co_id = aa;

end;

end;

Вот код тела триггера кода SQL Server 2005

begin

    declare @aa bigint;

    select @aa = se_id from inserted;

    update server set se_creationdate = CURRENT_TIMESTAMP , se_creationby = USER where se_id = @aa;

end;

спасибо

Крис

1 Ответ

3 голосов
/ 12 июля 2011

По умолчанию в PostgreSQL используется триггер на уровне строк (в отличие от SQL Server, где это триггер на уровне операторов), поэтому нет необходимости выбирать из «вставленной» таблицы.

Доступ к новым и старым значениям можно получить с помощью ключевых слов new и old (старых для триггера вставки не существует).

В вашем случае выражение будет просто:

  update com03 
       set co_creationdate = CURRENT_TIMESTAMP,
       co_creationby = CURRENT_USER
  where co_id = new.co_id;

Нет необходимости «выбирать из вставленного».

Это предполагает, что триггер не стрельба по столу com03.Если ваш триггер срабатывает для com03 (что вы нам не сказали), то это еще проще:

  new.co_creationdate := current_timestamp;
  new.co_creationby := current_user;

Подробнее см. В руководстве: http://www.postgresql.org/docs/current/static/plpgsql-trigger.html

Эта страница также содержит пример, который делает именно то, что вы пытаетесь достичь

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