Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr

애드-혹(Ad-hoc) 구독과 SQL 언어 지원 (Ad-hoc Subscriptions and SQL Language Support)


Recommended Posts

Docwiki에 있는 "Ad-hoc Subscriptions and SQL Language Support"을 번역한 글(최종 번역일: 2022년 8월 18일)

<< 위로 가기: 체인지 뷰스 (Change Views)

체인지 뷰스 (Change Views)를 임시로 구독하려면 애드-혹(ad-hoc) 구독(subscription)을 사용한다. 애드-혹 구독은 연결이 지속되는 동안 실행된다. 사용자는 이름을 가진 (named) 구독이 아니라 원하는 스키마 오브젝트를 직접 구독할 수 있다. 이 임시 구독은 해당 데이터베이스 연결이 종료될 때까지 유효하다. 하지만 연결이 유지되는 동안이라도 사용자가 명시적으로 비활성화면 더이상 유효하지 않다. 아래 예문은 체인지 뷰스 (Change Views)를 지원하기 위해 재작성된 ISQL 명령-줄 (command-line) 도구(유틸리티)를 보여준다.

사용자는 해당 스키마 오브젝트 (예: 테이블)에 대한 임시 구독 특권(privilege)을 받아야만 한다.

임시 구독 권한 부여 (GRANT TEMPORARY SUBSCRIBE)

GRANT TEMPORARY SUBSCRIBE 문장 구성

GRANT TEMPORARY SUBSCRIBE[(<필요한 컬럼들을 쉼표로 구분하여 나열>)] ON <테이블_이름> TO <사용자_이름>;
REVOKE TEMPORARY SUBSCRIBE[(<필요한 컬럼들을 쉼표로 구분하여 나열>)] ON <테이블_이름> FROM <사용자_이름>;

해당 사용자는 SET SUBSCRIPTION 명령(command)을 발행한다. 이때 구독(subscription) 이름 대신 기반 테이블의 이름을 직접 제공한다.

ISQL을 사용하여 데이터 변경 뷰(들)을 받기(RETRIEVE)

SET SUBSCRIPTION "Employees" ACTIVE;
SELECT NAME, DEPARTMENT, SALARY FROM "Employees";
COMMIT;

<또 다른 사용자가 기존 직원을 다른 부서로 재배치한다. 그리고  다른 직원은 급여를 인상한다>

SELECT NAME, DEPARTMENT, SALARY FROM "Employees";

 <CHANGE>     NAME     DEPARTMENT      SALARY
  update       joe       sales         50000
  update       mary     finance        75000

SET SAME;

SELECT NAME, DEPARTMENT, SALARY FROM "Employees";

 <CHANGE>      NAME     DEPARTMENT    SALARY
  update       <same>      sales      <same>
  update       <same>      <same>     75000

COMMIT;

SET SUBSCRIPTION "Employees" INACTIVE;

ISQL에는 SET 진술(statement)들의 모음이 있어서, 표시할(display) 결과 세트를 토글(toggle)할 수 있다. SET SAME 표시 토글은 해당 컬럼의 데이터 값을 보여 줄 것인지 아니면 변경되지 않는 데이터를 <same>으로 표시하고 변경된 데이터만 해당 값을 표시할 것이지를 왔다갔다 할 수 있다. <CHANGE> 컬럼은 의사(pseudo) 컬럼이며 여기에는 해당 컬럼의 값을 변경한 DML 진술의 유형이 표시된다. 이 변경 상태 모두는 새 구조인 XSQLDA의 멤버인 XSQLVAR.SQLIND에 의해서 반환된다.

데이터 변경 뷰를 지원하기 위해 인터베이스 SQL (ISQL)에 IS SAME 또는 IS NOT SAME 절이 추가되었다. 아래 예문을 참조:

IS NOT SAME을 SELECT 쿼리(query) 안에서 사용하기

 <SELECT NAME, DEPARTMENT, SALARY FROM "Employees" WHERE SALARY IS NOT SAME;

 <CHANGE>     NAME     DEPARTMENT     SALARY
  update      mary     finance        75000

위 예문의 결과를 보면 joe에 대한 행이 반환되지 않았다. 그 이유는 joe의 경우 부서만 이동했을 뿐 급여 조정이 없었기 때문이다.

다음 단계 (Advance To)

이 댓글 링크
다른 사이트에 공유하기

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 토픽(기고/질문)에 답하기

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.