복붙노트

[SQL] PostgreSQL의 IF 문

SQL

PostgreSQL의 IF 문

어떻게 포스트 그레스에서 같은 쿼리를 할 수 있습니까?

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

해결법

  1. ==============================

    1.시험:

    시험:

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

    당신은 실제로 모두 여기에 추가로 SELECT가 필요하지 않습니다. 이것은 조금 더 빨리, 같은 않습니다 :

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

    가능성이 있지만, 같은 테이블에 대한 동시 트랜잭션을 시도 쓰기 방해 할 수 있습니다. 시연으로 진행하기 전에 동일한 트랜잭션에서 테이블을 쓰기 - 잠금, 절대적으로해야합니다.

  2. ==============================

    2.그냥 도움말을 사람이 나 같은이 질문에 우연히 발견하는 경우, 당신이 사용하려는 경우 PostgreSQL을에, 당신은 "CASE"를 사용

    그냥 도움말을 사람이 나 같은이 질문에 우연히 발견하는 경우, 당신이 사용하려는 경우 PostgreSQL을에, 당신은 "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
    
  3. ==============================

    3.워드 프로세서

    워드 프로세서

    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를;

  4. ==============================

    4.또한 익명 코드 블록 절차 블록과 PL / pgSQL의 경우에 대한 기본 구조를 사용할 수 있습니다 :

    또한 익명 코드 블록 절차 블록과 PL / pgSQL의 경우에 대한 기본 구조를 사용할 수 있습니다 :

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

    참고 :

  5. from https://stackoverflow.com/questions/11299037/postgresql-if-statement by cc-by-sa and MIT license