녕지의 개발 블로그
Published 2022. 12. 12. 17:20
RETURNING database/PostgreSQL

INSERT, UPDATE, DELETE 쿼리 뒤에 RETURNING * 를 입력해 주면 실행한 쿼리의 결과를 출력해 준다

RETURNING *
-- SELECT * FROM 테이블명; 과 같다
-- * 대신 컬럼명 입력 가능

INSERT 예제

상품 기본 정보를 상품 테이블(PRODUCT)에 입력 후 정상 처리되면 상품 id(pro_id)를 받아 상품 상세 정보 테이블(PRODUCT_INFO)에 INSERT 한다

WITH INPRO AS (
	INSERT INTO PRODUCT (pro_id, pro_name)
    VALUEST (1, '노트북') RETURNING pro_id
)
INSERT INTO PRODUCT_INFO (pro_id, pro_qty)
SELECT pro_id, 4 AS pro_qty
FROM INPRO;

 

UPDATE 예제

상품 테이블(PRODUCT)에 있는 상품 이름(pro_name)을 UPDATE하고 상품 히스토리 테이블(pro_history)에 변경된 상품 이름을 INSERT한다

WITH UPSERT AS (
	UPDATE PRODUCT SET pro_name = 'LG 노트북' WHERE pro_name = '노트북' RETURNING pro_name
)
INSERT INTO pro_history (description, creat_dt)
	SELECT UPSERT.pro_name || '로 수정', NOW()
    FROM UPSERT;

 

DELETE 예제

상품 테이블에서 상품 id가 1인 값은 삭제하고 삭제된 상품을 백업 테이블(product_backup)에 넣는다.

WITH DELSERT AS (
	DELETE FROM PRODUCT WHERE prod_id = 1 RETURNING *
)
INSERT INTO product_backup SELECT * FROM SELSERT;

'database > PostgreSQL' 카테고리의 다른 글

[PostgreSQL] 시간 타입  (0) 2022.12.29
profile

녕지의 개발 블로그

@녕지

주니어 개발자가 쓰는 IT에서 살아남기 . . .