V2_V3 변환 가이드

V3 신규 기능

Package 변경사항

DB Object Conversion Guide

SQL 조건절 강화

INDEX

V2 버전에서는 unique index의 기본값을 다음과 같이 설정하여 생성한다.
• create index: Unique index로 설정
• create non unique: Non unique index로 설정
V3 버전에서는 SQL 구문과 동일하게 기본값을 non-unique로 설정한다.
• create unique index: Unique index로 설정
• create index: Non unique index로 설정

기타 제한은 V2와 V3 모두 동일하다.

DROP INSTANCE

V2에서는 하위 object를 제거할 수 없었지만 V3에서는 하위 object를 모두 제거하므로 사용할 때 주의해야 한다.

CREATE INSTANCE

JOIN 처리 (두 개 테이블로 제한)

dbmMetaManager(DEMO)> select * from t1 a, t2 b
where a.c1 = b.c1;
---------------------------------------------------------------------------------
C1                   : 1
C2                   : 1
C1                   : 1
C2                   : 11
---------------------------------------------------------------------------------
C1                   : 2
C2                   : 2
C1                   : 2
C2                   : 22
---------------------------------------------------------------------------------
C1                   : 3
C2                   : 3
C1                   : 3
C2                   : 33
---------------------------------------------------------------------------------
C1                   : 4
C2                   : 4
C1                   : 4
C2                   : 44
---------------------------------------------------------------------------------
C1                   : 5
C2                   : 5
C1                   : 5
C2                   : 55
---------------------------------------------------------------------------------

5 row selected
dbmMetaManager(DEMO)> select a.c1, a.c2, b.c2 from t1 a, t2 b
where a.c1 > 2
and a.c1 = b.c1;
---------------------------------------------------------------------------------
C1                   : 3
C2                   : 3
C2                   : 33
---------------------------------------------------------------------------------
C1                   : 4
C2                   : 4
C2                   : 44
---------------------------------------------------------------------------------
C1                   : 5
C2                   : 5
C2                   : 55
---------------------------------------------------------------------------------

3 row selected

Procedure 지원

dbmMetaManager(unknown)> initdb
success
dbmMetaManager(unknown)> set instance dict
success
dbmMetaManager(DICT)> create instance demo
success
dbmMetaManager(DICT)> set instance demo
success
dbmMetaManager(DEMO)> create table t1 (c1 int, c2 char(20), c3 double)
success
dbmMetaManager(DEMO)> create unique index idx_t1 on t1 (c1)
success
dbmMetaManager(DEMO)> insert into t1 values (1, 'a', 1.5 )
success
dbmMetaManager(DEMO)> insert into t1 values (2, 'b', 2.5 )
success
dbmMetaManager(DEMO)> insert into t1 values (3, 'c', 3.5 )
success
dbmMetaManager(DEMO)> insert into t1 values (4, 'd', 4.5 )
success
dbmMetaManager(DEMO)> insert into t1 values (5, 'e', 5.5 )
success
dbmMetaManager(DEMO)> commit
success
dbmMetaManager(DEMO)> create or replace procedure proc1()
is
  v1 int;
  v2 char(20);
  v3 double;
  v4 t1%rowtype;
cursor c1 (a1 int, a2 double )
 is select * from t1 where c1 >= a1 and c3 > a2;
begin
  open c1 (2, 3);

  loop
    fetch c1 into v1, v2, v3;
    exit when c1%notfound;
    dbms_output.put_line( 'v1 = ' || v1 || ', v2 = ' || v2 || ', v3 = ' || v3 || ', RowCount=' || c1%rowcount );
  end loop;

  close c1;

  open c1 (2, 3);

  loop
    fetch c1 into v4;
    exit when c1%notfound;
    dbms_output.put_line( 'c1 = ' || v4.c1 || ', c2 = ' || v4.c2 || ', c3 = ' || v4.c3 || ', RowCount=' || c1%rowcount );
  end loop;

end;
/

success
dbmMetaManager(DEMO)> exec proc1
v1 = 3, v2 = c, v3 = 3.500000, RowCount=1
v1 = 4, v2 = d, v3 = 4.500000, RowCount=2
v1 = 5, v2 = e, v3 = 5.500000, RowCount=3
c1 = 3, c2 = c, c3 = 3.500000, RowCount=1
c1 = 4, c2 = d, c3 = 4.500000, RowCount=2
c1 = 5, c2 = e, c3 = 5.500000, RowCount=3
success
dbmMetaManager(DEMO)> quit

기타 변경사항

API Conversion Guide

이 장에서는 V2 버전에서 V3 버전으로 변환할 때 참고할 사항들을 설명한다.

dbmHandle 처리

V2 코드

dbmHandle    sHandle;

dbmInitHandle( &sHandle, "DEMO" );

V3 코드

dbmHandle    * sHandle = NULL;

dbmInitHandle( &sHandle, "DEMO" );

dbmPrepareTable

호환성을 위해 제공은 하지만 더 이상 호출은 하지 않고 최초 API에서 필요한 경우에 자동으로 처리된다.
다만 성능을 위해 별도로 제공되는 dbmPrepareTableHandle API 사용을 권장한다.

dbmInsertRow

dbmUpdateRow

V2 코드

dbmHandle    sHandle;
UserData     sData;

dbmUpdateRow( &sHandle, "T1", &sData );

V3 코드

dbmHandle    * sHandle = NULL;
UserData       sData;
int            sAffectedCount;

dbmUpdateRow( sHandle, "t1", &sData, &sAffectedCount );

dbmDeleteRow

V2 코드

dbmHandle    sHandle;
UserData     sData;

dbmDeleteRow( &sHandle, "T1", &sData );

V3 코드

dbmHandle    * sHandle = NULL;
UserData       sData;
int            sAffectedCount;

dbmDeleteRow( sHandle, "t1", &sData, &sAffectedCount );

dbmOpenCursor(GT/LT)

V2 코드

dbmHandle    sHandle;
UserData     sData;

dbmOpenCursor( &sHandle, "T1", &sData );
dbmFetchRow( &sHandle, "T1", &sData );

V3 코드

dbmHandle    * sHandle = NULL;
UserData       sData;
int            sAffectedCount;

dbmSelectRow( sHandle, "t1", &sData );   // dbmSelectRowGT, dbmSelectRowLT
dbmFetchNextGT( sHandle, "t1", &sData );

단순한 조회만 목적으로 할 경우, 다음과 같이 SQL문을 활용하여 조회할 수도 있다.

dbmInitHandle    * sHandle = NULL;
dbmStmt          * sStmt = NULL;
int                v1;
int                v2;

dbmPrepareStmt( sHandle, "select * from t1 where c1 > 10 and c1 < 20", &sStmt );

dbmBindCol( sHandle, sStmt, &v1 );
dbmBindCol( sHandle, sStmt, &v2 );


dbmExecuteStmt( sHandle, sStmt );


while( !dbmFetchStmt( sHandle, sStmt ) )
{
    printf( "v1 = %d, v2 = %d\n", v1, v2 );
}
dbmBindCol는 조회하기 위해 fetch된 column을 저장할 변수를 연결하는 과정이며 select 된 target절의 타입과 동일한 순서로 기술한다.

dbmSelectRowDirtyRead 계열 함수

V3에서는 V2와 달리 commit 하는 도중에 Multi Versioning Concurrency Control (MVCC) 기법을 통해 read consistency를 보장하므로 더 이상 해당 API는 필요하지 않아 모두 제거된다. 동일한 방법으로 dbmSelectRow 함수를 통해 read를 보장한다.

dbmDeferCommit. dbmDeferSync API 제거

V1에서 제공되던 일부 API들은 더 이상 제공되지 않는다.