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

PostgreSQL - Връща съдържанието на реда, когато UPDATE е неуспешно

Една опция да продължите да използвате актуализация и все още да връщате конфликтните редове е да създадете функция, която извършва тази проверка, преди да извършите актуализацията. В случай, че първичният ключ вече съществува, той връща конфликтния ред, а ако не, редът се актуализира. Пример за такава функция може да бъде:

CREATE OR REPLACE FUNCTION my_func(cont TEXT, lang INT, idp TEXT) 
RETURNS SETOF sentence AS $$
DECLARE j RECORD;
BEGIN
  SELECT * FROM sentence WHERE content = cont AND 
                               language_id = lang INTO j;
  IF j IS NOT NULL THEN 
    RETURN NEXT j;
  ELSE
    RETURN QUERY UPDATE sentence SET content = cont, language_id= lang 
                 WHERE id = idp RETURNING *;
  END IF;
  EXCEPTION WHEN SQLSTATE '23505' THEN 
  RETURN QUERY SELECT * FROM sentence WHERE content = cont AND
                                            language_id= lang;
END$$ LANGUAGE plpgsql;

SELECT my_func('This is a sentence',834,'0538f24a-2046-4da6-933d-409aa7b7c597');

РЕДАКТИРАНЕ :Ако няма конфликт и все още искате RETURNING * , просто добавете RETURN QUERY към UPDATE изявление:

...    
RETURN QUERY 
UPDATE sentence SET content = cont, language_id= lang WHERE id = idp 
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. Как да промените сортирането на колони postgresql

  3. Избор на схема за динамично изпълнение на PostgreSQL в jOOQ

  4. Получаване на NoSuchMethodError:javax.persistence.Table.indexes() при изпълнение на JPA заявка

  5. Psycopg2 форматиране на низове с имена на променливи за създаване на тип