Oracle/PL_SQL2009. 11. 12. 09:22

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보다 연산을 빨리 수행하는지 테스트 해볼까요??

실제 비교를 하기 전에 똑같은 환경을 만들어 줍니다.

set timing on                     - 소요시간을 화면에 출력해주기 위해 설정

drop table t1 purge;

create table t1   
(col1 number);


BINARY_INTEGER

declare
    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


또 같은 환경을 만들어줍니다.

drop table t1 purge;

create table t1
(col1 number);

NUMBER

declare
    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

같은 환경을 만들어 줍니다.

drop table t1 purge;

create table t1
(col1 number);


PLS_INTERGER

declare
    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
Posted by 자수성가한 부자