- 카테고리:
시스템 함수 (시스템 정보)
SYSTEM$STREAM_HAS_DATA¶
지정된 스트림에 변경 데이터 캡처(CDC) 레코드가 포함되어 있는지 여부를 나타냅니다.
구문¶
SYSTEM$STREAM_HAS_DATA('<stream_name>')
인자¶
stream_name
쿼리할 스트림의 이름입니다.
데이터베이스와 스키마(이름이 정규화된 경우)를 포함하여 전체 이름을 작은따옴표로 묶어야 합니다. 즉,
'<db>.<스키마>.<스트림_이름>'
이어야 합니다.스트림 이름이 대/소문자를 구분하거나 특수 문자나 공백이 포함된 경우, 대/소문자를 처리하려면 큰따옴표가 필요합니다. 큰따옴표는 작은따옴표로 묶어야 합니다. 즉,
'"<스트림_이름>"'
이어야 합니다.
사용법 노트¶
이 함수는 작업 정의에서 WHEN 식에 사용하기 위한 것입니다. 지정된 스트림에 변경 데이터가 포함되어 있지 않은 경우, 작업이 현재 실행을 건너뜁니다. 이 검사는 웨어하우스를 불필요하게 시작하거나 재개하는 것을 방지하는 데 도움이 될 수 있습니다. 그러나 함수는 가음성(즉, 스트림에 변경 데이터가 포함된 경우에도 false 값 반환)을 방지하도록 설계되었지만, 이 함수는 가양성(즉, 스트림에 변경 데이터가 포함되지 않은 경우 true 값 반환)을 방지하는 것으로 보장되지는 않습니다.
이 함수는 스트림에 CDC 레코드가 포함되어 있는지 여부를 확인하기 위해 테이블 버전 메타데이터(스트림 오프셋과 현재 트랜잭션 시간 사이)에 대한 diff를 수행합니다. 해당 기간 동안 테이블에 대한 DML 활동이 삽입, 선택적으로 업데이트, 삭제되는 동일한 행 세트로 구성되어 원래 테이블 상태로 돌아가는 경우, 스트림이 CDC 레코드를 포함하지 않더라도 이 함수가 TRUE 값을 반환할 수 있습니다.
입력이 뷰 스트림인 경우, 기본 테이블 에 대한 변경 데이터 캡처(CDC) 레코드가 변경될 때 반환 값은
TRUE
입니다. 이 함수는 뷰 자체가 아니라 기본 테이블에 대한 버전 메타데이터에서 diff를 수행합니다. 변경된 기본 테이블의 행을 소스 뷰 정의의 쿼리가 참조하지 않는 경우 결과는 가양성입니다. 뷰가 더 선택적으로 될수록 가양성 비율이 증가합니다.이 함수가 작업 정의의 선택적
WHEN
매개 변수에서 참조되는 경우, 가양성 비율이 높다는 것은 테이블 스트림이 함수에 대한 입력일 때보다 뷰 스트림이 비어 있을 때 작업이 더 자주 실행될 수 있음을 의미합니다. 그러나 이 검사는 기본 테이블 데이터에 변경 사항이 없을 때 여전히 작업 실행을 방지합니다.
예¶
create table MYTABLE1 (id int); create table MYTABLE2(id int); create stream MYSTREAM on table MYTABLE1; insert into MYTABLE1 values (1); -- returns true because the stream contains change tracking information select system$stream_has_data('MYSTREAM'); +----------------------------------------+ | SYSTEM$STREAM_HAS_DATA('MYSTREAM') | |----------------------------------------| | True | +----------------------------------------+ -- consume the stream begin; insert into MYTABLE2 select id from MYSTREAM; commit; -- returns false because the stream was consumed select system$stream_has_data('MYSTREAM'); +----------------------------------------+ | SYSTEM$STREAM_HAS_DATA('MYSTREAM') | |----------------------------------------| | False | +----------------------------------------+