SYS_ROW_ETAG 함수

2023. 6. 7.·Oracle/SQL

Oracle 23c에 SYS_ROW_ETAG 함수가 추가되었습니다. 이 함수는 칼럼 입력 순서와 무관하게 입력 값에 대한 고유한 32바이트 RAW 값을 반환합니다. 결과 값을 사용하면 데이터 변경 여부를 확인할 수 있습니다.

SYS_ROW_ETAG (([[schema_name.]table_name.]column_name) [,([[schema_name.]table_name.]column_name)]...)

 

테스트를 위해 아래와 같이 테이블을 생성하겠습니다.

-- 1
DROP TABLE t1 PURGE;
CREATE TABLE t1 (c1 NUMBER, c2 VARCHAR2(1), c3 VARCHAR2(1), c4 VARCHAR2(1));

INSERT INTO t1 VALUES (1, 'A', 'A', 'B');
INSERT INTO t1 VALUES (2, 'A', 'A', 'B');
INSERT INTO t1 VALUES (3, 'A', 'B', 'A');
INSERT INTO t1 VALUES (4, 'A', 'B', 'C');
COMMIT;

 

아래는 SYS_ROW_ETAG 함수를 사용한 결과입니다. 입력한 칼럼 순서와 무관하게 동일한 값이 반환됩니다.

-- 2
SELECT c1
     , SYS_ROW_ETAG (c2, c3, c4) AS sre1
     , SYS_ROW_ETAG (c4, c3, c2) AS sre2
  FROM t1;

C1 SRE1                             SRE2
-- -------------------------------- --------------------------------
 1 F3D49F927979FB38E5F95648F0E5466A F3D49F927979FB38E5F95648F0E5466A
 2 F3D49F927979FB38E5F95648F0E5466A F3D49F927979FB38E5F95648F0E5466A
 3 256AE95E5D7E2ADFBF8164A61A098EB3 256AE95E5D7E2ADFBF8164A61A098EB3
 4 E840BF9CB85269C6898B050EEFE5C7A1 E840BF9CB85269C6898B050EEFE5C7A1

4 행이 선택되었습니다.

 

아래 예제는 SYS_ROW_ETAG 함수를 사용한 Optimistic Locking을 보여줍니다.

-- 3-1: S1
VAR v_etag VARCHAR2(32)
EXEC SELECT SYS_ROW_ETAG (c2, c3, c4) INTO :v_etag FROM t1 WHERE c1 = 1;

-- 3-2: S2
UPDATE t1 SET c2 = 'B' WHERE c1 = 1;
COMMIT;

-- 3-3: S1
UPDATE t1 SET c3 = 'C' WHERE c1 = 1 AND SYS_ROW_ETAG (c2, c3, c4) = :v_etag;

0 행이 업데이트되었습니다.
저작자표시 비영리 변경금지 (새창열림)
'Oracle/SQL' 카테고리의 다른 글
  • Interval 값을 초로 변환
  • 현재 세션 SERIAL 번호 조회
  • BITOR 함수와 BITXOR 함수
  • KURTOSIS_POP 함수와 KURTOSIS_SAMP 함수
정희락
정희락
2007년부터 Oracle Database 성능 최적화에 주력해 왔으며, 현재 한국오라클 Engineered Systems Solution Engineering 팀에서 Solution Engineer로 근무하고 있습니다. 이 블로그는 개인적인 연구 목적으로 운영되며, Oracle 사의 공식 입장을 대변하지 않습니다.
  • 정희락
    TunA
    정희락
  • 전체
    오늘
    어제
    • 분류 전체보기 (194)
      • Oracle (166)
        • SQL (32)
        • PLSQL (10)
        • Performance (72)
        • Administration (36)
        • Installation (3)
        • Utilities (1)
        • JSON (8)
        • Vector (4)
      • Exadata (15)
      • SQL*Plus (2)
      • Linux (5)
      • Resources (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 도서

    • 불친절한 SQL 프로그래밍
    • 불친절한 PL/SQL 프로그래밍
  • 링크

    • Connor McDonald
    • Frits Hoogland
    • Jonathan Lewis
    • Julian Dontcheff
    • Julian Dyke
    • Kun Sun
    • Maria Colgan
    • Martin Bach
    • Mike Dietrich
    • Tanel Poder
  • 공지사항

  • 인기 글

  • 태그

    12c
    19c
    21c
    23ai
    case study
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
정희락
SYS_ROW_ETAG 함수
상단으로

티스토리툴바