FAQ & Tip 에서 확인 자료 입니다.
http://www.cubrid.com/zbxe/58122
위 방법으로는 오라클에서처럼 처리를 할 수 없다는 말씀인데.
--Case 1
create table xtbl
(
A int,
B timestamp default systimestamp not null,
C datetime default sysdatetime not null
)
--Case 2
create table xtbl2
(
A int,
B timestamp default SYS_TIMESTAMP not null,
C varchar(14) default TO_CHAR(SYS_TIMESTAMP, 'YYYYMMDDHH24MISS') not null
)
저 같은 경우는 Case 형식으로 오라클에서 사용하였습니다.
근데 Cubrid에서는 위와 같은 방법(Case 1,2)은 안되는것 같은데...
INSERT INTO TB_TMP01(A, B) VALUES(1, TO_CHAR(SYS_TIMESTAMP, 'YYYYMMDDHH24MISS'))
위와 같은 방법 밖에 없는 것인지 궁금합니다.
그리고 Cubrid에서도 저장일시와 같은 경우 위와 같이 varchar로 처리하는 것이 처리면에서나 성능상의 장점이 많은 것인지?
답변 부탁 드립니다.
감사합니다.
http://www.cubrid.com/zbxe/58122
위 방법으로는 오라클에서처럼 처리를 할 수 없다는 말씀인데.
--Case 1
create table xtbl
(
A int,
B timestamp default systimestamp not null,
C datetime default sysdatetime not null
)
--Case 2
create table xtbl2
(
A int,
B timestamp default SYS_TIMESTAMP not null,
C varchar(14) default TO_CHAR(SYS_TIMESTAMP, 'YYYYMMDDHH24MISS') not null
)
저 같은 경우는 Case 형식으로 오라클에서 사용하였습니다.
근데 Cubrid에서는 위와 같은 방법(Case 1,2)은 안되는것 같은데...
INSERT INTO TB_TMP01(A, B) VALUES(1, TO_CHAR(SYS_TIMESTAMP, 'YYYYMMDDHH24MISS'))
위와 같은 방법 밖에 없는 것인지 궁금합니다.
그리고 Cubrid에서도 저장일시와 같은 경우 위와 같이 varchar로 처리하는 것이 처리면에서나 성능상의 장점이 많은 것인지?
답변 부탁 드립니다.
감사합니다.
넵 default sys_timestamp 나 sysdate의 경우 오라클과 다르게 작동 합니다. 테이블 생성시로 변환되어 들어가게 됩니다.
다음의 테이블과 같이 생성이 됩니다.
csql> ;sc test_data3
=== <Help: Schema of a Class> ===
<Class Name>
test_data3
Attributes>
int_data INTEGER
char_date TIMESTAMP DEFAULT timestamp '06:05:54 PM 01/07/2010' NOT NULL
고로 불편 하시겠지만 다음 질의처럼 매번 시간을 입력하셔야 합니다.
INSERT INTO TB_TMP01(A, B) VALUES(1, TO_CHAR(SYS_TIMESTAMP, 'YYYYMMDDHH24MISS'))
두번째 , 답변 입니다. 시분초를 사용하셔야 한다면 timestamp 타입을 쓰시는게 성능 향상에 도도움 될 것 같습니다. 저장되는 용량의 차이가 발생하기 때문입니다.
다음은 테스트 결과인데 참고 하시기 바랍니다.
create table test_data1
(
int_data int,
char_date varchar(8) default to_char(sysdate,'YYYYMMDD') not null
);
insert into test_data1
SELECT a.rnum
, case when a.moddata = 1 then '20101201'|| '000'|| to_char(MOD(rownum,10))
when a.moddata = 2 then '20101202'|| '000'|| to_char(MOD(rownum,10))
when a.moddata = 3 then '20101203'|| '000'|| to_char(MOD(rownum,10))
when a.moddata = 4 then '20101204'|| '000'|| to_char(MOD(rownum,10))
when a.moddata = 5 then '20101205'|| '000'|| to_char(MOD(rownum,10))
when a.moddata = 6 then '20101206'|| '000'|| to_char(MOD(rownum,10))
when a.moddata = 7 then '20101207'|| '000'|| to_char(MOD(rownum,10))
when a.moddata = 8 then '20101208'|| '000'|| to_char(MOD(rownum,10))
when a.moddata = 9 then '20101209'|| '000'|| to_char(MOD(rownum,10))
when a.moddata = 10 then '20101210'|| '000'||to_char(MOD(rownum,10))
else '20101211'|| '000'|| to_char(MOD(rownum,10))
end
from (
SELECT rownum rnum , mod(rownum,10) moddata
FROM table({0,1,2,3,4,5,6,7,8,9}) t0(a),
table({0,1,2,3,4,5,6,7,8,9}) t1(a), -- 100
table({0,1,2,3,4,5,6,7,8,9}) t2(a), -- 1,000
table({0,1,2,3,4,5,6,7,8,9}) t3(a) -- 10,000
) a
;x
create table test_data3
(
int_data int,
char_date timestamp default systimestamp not null
);
insert into test_data3
SELECT a.rnum
, case when a.moddata = 1 then to_timestamp('20101201','YYYYMMDD')
when a.moddata = 2 then to_timestamp('20101202','YYYYMMDD')
when a.moddata = 3 then to_timestamp('20101203','YYYYMMDD')
when a.moddata = 4 then to_timestamp('20101204','YYYYMMDD')
when a.moddata = 5 then to_timestamp('20101205','YYYYMMDD')
when a.moddata = 6 then to_timestamp('20101206','YYYYMMDD')
when a.moddata = 7 then to_timestamp('20101207','YYYYMMDD')
when a.moddata = 8 then to_timestamp('20101208','YYYYMMDD')
when a.moddata = 9 then to_timestamp('20101209','YYYYMMDD')
when a.moddata = 10 then to_timestamp('20101210','YYYYMMDD')
else to_timestamp('20101211','YYYYMMDD')
end
from (
SELECT rownum rnum , mod(rownum,10) moddata
FROM table({0,1,2,3,4,5,6,7,8,9}) t0(a),
table({0,1,2,3,4,5,6,7,8,9}) t1(a), -- 100
table({0,1,2,3,4,5,6,7,8,9}) t2(a), -- 1,000
table({0,1,2,3,4,5,6,7,8,9}) t3(a) -- 10,000
) a
;x
$ csql -u dba index_test -S
CUBRID SQL Interpreter
Type `;help' for help messages.
csql> ;info stats test_data1
CLASS STATISTICS
****************
Class name: test_data1 Timestamp: Thu Jan 7 18:06:23 2010
Total pages in class heap: 416
Total objects: 10000
Number of attributes: 2
Atrribute: int_data
id: 1
Type: DB_TYPE_INTEGER
Mininum value: 1
Maxinum value: 10000
B+tree statistics:
Atrribute: char_date
id: 0
Type: DB_TYPE_STRING
Mininum value: Undefined
Maxinum value: Undefined
B+tree statistics:
BTID: { 2 , 2856 }
Cardinality: 10 (10) , Total pages: 21 , Leaf pages: 20 , Height: 2
Current transaction has been committed.
csql> ;info stats test_data3
CLASS STATISTICS
****************
Class name: test_data3 Timestamp: Thu Jan 7 18:06:23 2010
Total pages in class heap: 312
Total objects: 10000
Number of attributes: 2
Atrribute: char_date
id: 0
Type: DB_TYPE_UTIME
Mininum value: 1291129200
Maxinum value: 1291993200
B+tree statistics:
Atrribute: int_data
id: 1
Type: DB_TYPE_INTEGER
Mininum value: 1
Maxinum value: 10000
B+tree statistics:
오라클의 경우 http://scidb.tistory.com/entry/Varchar28-VS-Date-어느-것이-우월한가
에서 장단점을 확인 하시길 바랍니다.
즐거운 하루 되세요.