안녕하세요.
DATAOBJ_TO_PARTITION은 어떤경우에 사용이 되는지 궁금합니다.
일반적으로 머지를 사용한다면
MERGE INTO 테이블명 partition(파티션명)
이렇게 시작이 되는걸로 알고있는데요.
다음과같이 프로시저가 구성되어있습니다.
SELECT data_object_id into d_obj_id
FROM user_objects
WHERE object_name = upper(테이블명)
AND object_type = 'TABLE PARTITION'
AND subobject_name = 파티션명 ;
MERGE INTO 테이블명 partition(DATAOBJ_TO_PARTITION(테이블명,위의d_obj_id));
DATAOBJ_TO_PARTITION 에 대해서 정보가 많지 않아 이렇게 질문드려봅니다.
데이터 개발 시에,
객체 또는 분할영역(파티션)명에 대해서는 Pro*C내에서의 바인드변수나 쉘스크립트내에서의 매개변수대입처리가 안되므로,
문자열을 조립하여 dynamic 방식으로 처리하였는데,
system dictionary로부터 DATA_OBJECT_ID를 변수처리하여 가져와
DATAOBJ_TO_PARTITION 함수를 통해 일반적인 embedded 방식으로의 질의문 처리가 가능할 듯 합니다.
(일부에서는 dynamic을 금기시하는 개발정책도 존재)
(일반적으로 DBA들이 dynamic 쓰는 것을 꺼려함)
한편, DBA 업무 측면에서 데이터 보전정책 기준으로
파티셔닝(또는 서브파티셔닝)된 객체(테이블/인덱스)를 정기적으로 관리(SPLIT/TRUNCATE/DROP/ADD)할 경우에도 응용가능해 보입니다만,
Pro*C나 PL/SQL내에서의 DDL은 dynamic으로 처리하므로, 데이터 개발상의 이점보다는 상대적으로 약해 보입니다. (개인적 생각)
DATAOBJ_TO_PARTITION 함수로 파티션/서브파티션 모두 반환가능하며,
11g new feature로 보여집니다.
메뉴얼에는 아래와 같이 나와있네요,
DATAOBJ_TO_PARTITION is useful only to Data Cartridge developers who are performing data maintenance or query operations on system-partitioned tables that are used to store domain index data. The DML or query operations are triggered by corresponding operations on the base table of the domain index.