PLS_INTEGER은 PL/SQL에서 사용가능한 데이터 타입입니다. 그런데 왜 이러한 데이터 타입이 나오게 되었을까요?? 그건 바로 처리속도 때문입니다. 빠르게 된 이유로는 BINARY_INTEGER와 NUMBER 타입이 "라이브러리를 이용" 하여 수치 연산을 하는 반면, PLS_INTEGER는 실제 기계적인 연산(Machine arithmetic)을 수행하기 때문이라고 하네요. |
-2147483647과 2147483647 사이의 signed 정수에 대한 기본형으로 정의 할 수 있습니다.
원문)
You use the PLS_INTEGER
datatype to store signed integers. Its magnitude range is -2147483648 to 2147483647, represented in 32 bits. PLS_INTEGER
values require less storage than NUMBER
values and NUMBER
subtypes. Also, PLS_INTEGER
operations use hardware arithmetic, so they are faster than NUMBER
operations, which use library arithmetic. For efficiency, use PLS_INTEGER
for all calculations that fall within its magnitude range. For calculations outside the range of PLS_INTEGER
, you can use the INTEGER
datatype.
출처 : http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/datatypes.htm#i10726
그럼, 실제로 PLS_INTEGER이 BINARY_INTEGER나 NUMBER보다 연산을 빨리 수행하는지 테스트 해볼까요??
실제 비교를 하기 전에 똑같은 환경을 만들어 줍니다.
drop table t1 purge;
create table t1
(col1 number);
BINARY_INTEGER
i number:=1;
j number:=2;
k number:=3;
total number:=0;
begin
for l in 1..100000000 loop
total := total+i+j+k;
end loop;
dbms_output.put_line(total);
end;
/
소요시간 : 00:00:18.65
또 같은 환경을 만들어줍니다.
create table t1
(col1 number);
NUMBER
i binary_integer:=1;
j binary_integer:=2;
k binary_integer:=3;
total binary_integer:=0;
begin
for l in 1..100000000 loop
total := total+i+j+k;
end loop;
dbms_output.put_line(total);
end;
/
소요시간 : 00:00:06.84
같은 환경을 만들어 줍니다.
create table t1
(col1 number);
PLS_INTERGER
i pls_integer:=1;
j pls_integer:=2;
k pls_integer:=3;
total pls_integer:=0;
begin
for l in 1..100000000 loop
total := total+i+j+k;
end loop;
dbms_output.put_line(total);
end;
/
소요시간 : 00:00:05.20
단위 : 초
NUMBER | BINARY_INTEGER | PLS_INTEGER | |
소요시간 | 18.65 | 06.84 | 05.20 |
이렇게 해서 PLS_INTEGER의 연산속도가 NUMBER와 BINARY_INTEGER보다 빠르다는 것을 알 수 있었습니다.
'Oracle > PL_SQL' 카테고리의 다른 글
테이블 변경시 관련 procedure, function, package 확인 (0) | 2009.11.16 |
---|---|
wrap pld (0) | 2009.11.16 |
Exception handling (0) | 2009.11.13 |
Cursor (0) | 2009.11.12 |
Bind Variables(Host Variable) (0) | 2009.11.12 |