반응형
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에는 절차 적 요소가 없습니다. 이
IF
명령문 은 기본 절차 언어 PL / pgSQL의 일부입니다. 함수를 만들거나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$
가능성은 낮지 만 동일한 테이블에 쓰기를 시도하는 동시 트랜잭션이 방해를받을 수 있습니다. 확실히하려면 설명 된대로 진행하기 전에 동일한 트랜잭션에서 테이블을 쓰기 잠금 하십시오.
저와 같은 질문에 우연히 발견 한 사람이 있으면 도움을주기 위해 PostgreSQL에서 if를 사용하려면 "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
로부터 문서
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;
익명 코드 블록 프로 시저 블록 과 함께 PL / pgSQL CASE의 기본 구조를 사용할 수도 있습니다 .
DO $$ BEGIN
CASE
WHEN boolean-expression THEN
statements;
WHEN boolean-expression THEN
statements;
...
ELSE
statements;
END CASE;
END $$;
참조 :
- http://www.postgresql.org/docs/current/static/sql-do.html
- https://www.postgresql.org/docs/current/static/plpgsql-control-structures.html
참고URL : https://stackoverflow.com/questions/11299037/postgresql-if-statement
반응형
'Nice programing' 카테고리의 다른 글
Vim Command-T 플러그인 오류 : C 확장을로드 할 수 없습니다. (0) | 2020.12.10 |
---|---|
데이터베이스에 저장된 이미지를 반환하는 Flask (0) | 2020.12.10 |
C ++ 기본 인수를 다른 인수로 초기화 할 수 있습니까? (0) | 2020.12.09 |
Google Maps V3에서 번호가 매겨진지도 마커를 어떻게 만들 수 있습니까? (0) | 2020.12.09 |
iOS 충돌 보고서 : atos가 예상대로 작동하지 않음 (0) | 2020.12.09 |