sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL IF uttalande

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

Det finns inga procedurelement i standard SQL. IF uttalandet är en del av standardprocedurspråket PL/pgSQL. Du måste skapa en funktion eller köra en ad-hoc-sats med DO kommando.

Du behöver ett semikolon (; ) i slutet av varje sats i plpgsql (förutom den sista END ).

Du behöver END IF; i slutet av IF uttalande.

Ett underval måste omges av parentes:

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

Eller:

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

Detta är dock likvärdigt och mycket snabbare:

    IF EXISTS (SELECT FROM orders) ...

Alternativ

Den extra SELECT behövs inte. Detta gör samma sak, snabbare:

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

Även om det är osannolikt, kan samtidiga transaktioner som skrivs till samma bord störa. För att vara helt säker, skrivlås tabellen i samma transaktion innan du fortsätter som visat.



  1. Postgres:vakuumkommandot rensar inte upp döda tuplar

  2. Hur man får åtkomst till MySQL med MySQL Root User

  3. SCD typ 2

  4. 3 sätt att returnera en lista över SQL Server Agent-jobb (T-SQL)