반응형
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 $$;
참조:
- http://www.postgresql.org/docs/current/static/sql-do.html
- 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
반응형
'programing' 카테고리의 다른 글
Serilog - 로그 항목이 호출된 MethodName을 사용하여 모든 메시지 출력/리치 (0) | 2023.05.10 |
---|---|
웹 작업의 App.config가 아닌 Azure Management Portal에서 웹 작업에 대한 연결 문자열을 구성해야 하는 이유는 무엇입니까? (0) | 2023.05.10 |
SSH 연결을 확인하는 bash 스크립트를 만드는 방법은 무엇입니까? (0) | 2023.05.10 |
해결 방법이 Java Virtual Machine Launcher의 가상 시스템 오류를 생성하지 못했습니다. (0) | 2023.05.10 |
스위프트에서 경고를 침묵시키는 방법은 무엇입니까? (0) | 2023.05.10 |