컴퓨터 Pro*C 에서 DBMS_STAT 사용하기
2007.12.06 14:14
DBMS_STAT 패키지는 일종의 오라클 내부의 프로시저라고 생각하면 된다.
따라서 Pro*C에서 Dynamic Query를 사용하지 않고 바로 EXEC SQL로 처리하려면
아래와 같이 EXECUTE를 쓰면 된다.
EXEC SQL EXECUTE
BEGIN
SYS.DBMS_STATS.GATHER_TABLE_STATS (
OwnName => 'OWNER'
,TabName => 'TABLE_NAME'
,PartName => 'PARTITION_NAME'
,Granularity => 'PARTITION'
,Estimate_Percent => 10
,Block_sample => TRUE
,Method_Opt => 'FOR ALL INDEXED COLUMNS SIZE AUTO '
,Degree => 4
,Cascade => TRUE
,No_Invalidate => FALSE);
END;
END-EXEC;
Dynamic Query는 아래와 같은 방식으로 한다.
sprintf( sql_text,
" BEGIN \n
SYS.DBMS_STATS.GATHER_TABLE_STATS ( \n
OwnName => 'NACFCV' \n
,TabName => '%s' \n
,PartName => '%s' \n
,Granularity => 'PARTITION' \n
,Estimate_Percent => 10 \n
,Block_sample => TRUE \n
,Method_Opt => 'FOR ALL INDEXED COLUMNS SIZE AUTO ' \n
,Degree => 4 \n
,Cascade => TRUE \n
,No_Invalidate => FALSE); \n
END;"
, table_name
, partition_name);
EXEC SQL EXECUTE IMMEDIATE :sql_text;
따라서 Pro*C에서 Dynamic Query를 사용하지 않고 바로 EXEC SQL로 처리하려면
아래와 같이 EXECUTE를 쓰면 된다.
EXEC SQL EXECUTE
BEGIN
SYS.DBMS_STATS.GATHER_TABLE_STATS (
OwnName => 'OWNER'
,TabName => 'TABLE_NAME'
,PartName => 'PARTITION_NAME'
,Granularity => 'PARTITION'
,Estimate_Percent => 10
,Block_sample => TRUE
,Method_Opt => 'FOR ALL INDEXED COLUMNS SIZE AUTO '
,Degree => 4
,Cascade => TRUE
,No_Invalidate => FALSE);
END;
END-EXEC;
Dynamic Query는 아래와 같은 방식으로 한다.
sprintf( sql_text,
" BEGIN \n
SYS.DBMS_STATS.GATHER_TABLE_STATS ( \n
OwnName => 'NACFCV' \n
,TabName => '%s' \n
,PartName => '%s' \n
,Granularity => 'PARTITION' \n
,Estimate_Percent => 10 \n
,Block_sample => TRUE \n
,Method_Opt => 'FOR ALL INDEXED COLUMNS SIZE AUTO ' \n
,Degree => 4 \n
,Cascade => TRUE \n
,No_Invalidate => FALSE); \n
END;"
, table_name
, partition_name);
EXEC SQL EXECUTE IMMEDIATE :sql_text;






