PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Правило за вмъкване в изглед на Postgres с клауза за връщане

Много по-добре е да използвате INSTEAD OF INSERT задействайте тук:

CREATE FUNCTION MyFuncName() RETURNS trigger AS $$
DECLARE
  id integer;
BEGIN
  INSERT INTO tableA (time) VALUES COALESCE(NEW.time, NOW()) RETURNING aPrimaryKey INTO id;
  INSERT INTO tableB (aPrimaryKey, someCol1) VALUES (id, NEW.someValue);
  RETURN NEW;
END; $$ LANGUAGE PLPGSQL;

CREATE TRIGGER MyView_on_insert INSTEAD OF INSERT ON MyView
  FOR EACH ROW EXECUTE PROCEDURE MyFuncName();

Проверката на текущата стойност на последователност, за да видите какво е вмъкнато в друга таблица, е лошо лошо лошо практика. Дори докато сте тук в една транзакция, не го правете.

Объркани сте относно проблема с RETURNING информация, защото и аз съм объркан, когато прочетох въпроса ви. Вътре във функция използвайте INTO клауза за попълване на локално декларирани променливи за съхранение на стойности на запис, които след това можете да използвате в следващите изрази. Извън функция използвайте RETURNING клауза, както правите във вашия най-горен кодов фрагмент.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Плъзгаща се средна въз основа на времеви печати в PostgreSQL

  2. Как да броим дните с изключение на неделята между две дати в Postgres?

  3. Как да промените локала при форматиране на числа в PostgreSQL

  4. Еквивалентност на от dual в PostgreSQL

  5. Как да заявите стойности със заместващи знаци в PostgreSQL hstore