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

Изявление на PostgreSQL IF

DO
$do$
BEGIN
   IF EXISTS (SELECT FROM orders) THEN
      DELETE FROM orders;
   ELSE
      INSERT INTO orders VALUES (1,2,3);
   END IF;
END
$do$

В стандартния SQL няма процедурни елементи. IF операторът е част от процедурния език по подразбиране PL/pgSQL. Трябва да създадете функция или да изпълните ad-hoc оператор с DO команда.

Имате нужда от точка и запетая (; ) в края на всеки израз в plpgsql (с изключение на крайния END). ).

Нуждаете се от END IF; в края на IF изявление.

Подизборът трябва да бъде заобиколен от скоби:

    IF (SELECT count(*) FROM orders) > 0 ...

Или:

    IF (SELECT count(*) > 0 FROM orders) ...

Това обаче е еквивалентно и много по-бързо:

    IF EXISTS (SELECT FROM orders) ...

Алтернатива

Допълнителният SELECT не е необходимо. Това прави същото, по-бързо:

DO
$do$
BEGIN
   DELETE FROM orders;
   IF NOT FOUND THEN
      INSERT INTO orders VALUES (1,2,3);
   END IF;
END
$do$

Макар и малко вероятно, едновременните транзакции, записващи в една и съща таблица, може да попречат. За да сте абсолютно сигурни, заключете таблицата в същата транзакция, преди да продължите, както е показано.



  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. Инсталиране на pg -v 0.17.1

  3. Как да получа асинхронна/управлявана от събития поддръжка LISTEN/NOTIFY в Java с помощта на база данни на Postgres?

  4. Десет съвета за навлизане в производство с PostgreSQL

  5. HikariCP Postgresql Driver твърди, че не приема JDBC URL