programing

PostgreSQL IF 문

telecom 2023. 5. 10. 20:16
반응형

PostgreSQL IF 문

Postgres에서 어떻게 그런 쿼리를 할 수 있습니까?

IF (select count(*) from orders) > 0
THEN
  DELETE from orders
ELSE 
  INSERT INTO orders values (1,2,3);
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에는 절차 요소가 없습니다.은 기본 절차 언어 PL/pgSQL의 일부입니다.명령을 사용하여 함수를 만들거나 임시 명령문을 실행해야 합니다.

세미콜론(;ppgsql의 각 문 끝에 있습니다(최종 제외).

필요합니다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$

가능성은 낮지만 동일한 테이블에 쓰는 동시 트랜잭션이 방해될 수 있습니다.확실히 하기 위해서는 그림과 같이 진행하기 전에 동일한 트랜잭션에서 테이블을 쓰기 잠급니다.

나처럼 이 질문에 실수하는 사람이 있다면, 만약 당신이 포스트그레에서 사용하고 싶다면, 도움을 주기 위해.SQL은 "CASE"를 사용합니다.

select 
    case
        when stage = 1 then 'running'
        when stage = 2 then 'done'
        when stage = 3 then 'stopped'
    else 
        'not running'
    end as run_status from processes

PL/pgSQL CASE의 기본 구조를 익명 코드 블록 프로시저 블록과 함께 사용할 수도 있습니다.

DO $$ BEGIN
    CASE
        WHEN boolean-expression THEN
          statements;
        WHEN boolean-expression THEN
          statements;
        ...
        ELSE
          statements;
    END CASE;
END $$;

참조:

  1. http://www.postgresql.org/docs/current/static/sql-do.html
  2. https://www.postgresql.org/docs/current/static/plpgsql-control-structures.html

문서에서

IF boolean-expression THEN
    statements
ELSE
    statements
END IF;

따라서 위의 예에서 코드는 다음과 같아야 합니다.

IF select count(*) from orders > 0
THEN
  DELETE from orders
ELSE 
  INSERT INTO orders values (1,2,3);
END IF;

누락되었습니다. END IF;

언급URL : https://stackoverflow.com/questions/11299037/postgresql-if-statement

반응형