오라클의 getxmltype 함수를 사용해서 테이블별 레코드수를 구하는 쿼리가 있더군요.
인포믹스에서도 가능한지 테스트를 해보았습니다.
우선 오라클에서 getxmltype 함수를 사용한 예제입니다
SELECT table_name
, num_rows -- 통계정보 건수
, TO_NUMBER(
dbms_xmlgen.getxmltype('SELECT COUNT(*) c FROM ' || table_name).Extract('//text()')
) num_rows2 -- 실제측정 건수
FROM user_tables
;
샘플 데이터인 SCOTT 계정에서 위와 같은 쿼리를 실행하면, 아래와 같은 결과를 보여줍니다.
TABLE_NAME NUM_ROWS NUM_ROWS2
------------------------------ ---------- ----------
DEPT 4 4
EMP 14 14
BONUS 0 0
SALGRADE 5 5
TB_DF_STAT 24 24
인포믹스에서 XML 함수를 사용하려면 idsxmlvp 클래스의 Virtual Processor가 작동중이어야 합니다.
이는 onconfig의 VPCLASS 설정이나 onmode 명령으로 동적으로 설정할 수 있습니다.
인포믹스의 샘플 데이터베이스인 stores_demo 에서 xml함수를 활용해서 아래의 쿼리문장을 만들었습니다.
사용한 함수는 extractvalue, genxmlquery 입니다. 기본내장된 함수들입니다.
select tabname,
nrows::int num_rows,
extractvalue(genxmlquery('set','SELECT count(*) c FROM '||tabname),'/set/row/c')::int num_rows2
from systables where tabid > 99 and tabtype = 'T';
tabname customer
num_rows 28
num_rows2 28
tabname orders
num_rows 23
num_rows2 23
tabname manufact
num_rows 9
num_rows2 9
tabname stock
num_rows 74
num_rows2 74
tabname items
num_rows 67
num_rows2 67
단일 쿼리로 건수를 검증할 수 있어 편리하네요. 용도에 맞게 사용하시면 좋을 것 같습니다.
대신 건수가 너무 많은 경우는 메모리나 디스크등 자원 소모량이 많아 시스템에 무리가 갈수도 있겠네요.
위와 같이 COUNT하는 용도외에도 활용할 수 있겠네요.
참조:
https://www.ibm.com/support/knowledgecenter/en/SSGU8G_11.70.0/com.ibm.xml.doc/ids_xpconfig.htm
'Informix > informix reference' 카테고리의 다른 글
LOB 타입 데이터 크기 계산 (0) | 2017.08.22 |
---|---|
인포믹스 Growth or Workgroup 에디션의 병렬 , 파티션 기능 활성화 (0) | 2017.02.15 |
여러 열의 데이터를 한 행으로 표시하기 (0) | 2016.09.08 |
SDS환경에서 FAILOVER_CALLBACK 스크립트의 중요성 (0) | 2016.09.06 |
How to use newline and carriage returns within SQL in dbaccess (0) | 2016.05.27 |