Performance of Numeric Data Types in PL/SQL
This article demonstrates the relative performance of the numeric data types in PL/SQL.
oracle miscconfigurationintermediate
by OracleDba
13 views
This article demonstrates the relative performance of the numeric data types in PL/SQL.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
SET SERVEROUTPUT ON
DECLARE
l_number1 NUMBER := 1;
l_number2 NUMBER := 1;
l_integer1 INTEGER := 1;
l_integer2 INTEGER := 1;
l_pls_integer1 PLS_INTEGER := 1;
l_pls_integer2 PLS_INTEGER := 1;
l_binary_integer1 BINARY_INTEGER := 1;
l_binary_integer2 BINARY_INTEGER := 1;
l_simple_integer1 SIMPLE_INTEGER := 1;
l_simple_integer2 SIMPLE_INTEGER := 1;
l_loops NUMBER := 10000000;
l_start NUMBER;
BEGIN
-- Time NUMBER.
l_start := DBMS_UTILITY.get_time;
FOR i IN 1 .. l_loops LOOP
l_number1 := l_number1 + l_number2;
END LOOP;
DBMS_OUTPUT.put_line('NUMBER : ' ||
(DBMS_UTILITY.get_time - l_start) || ' hsecs');
-- Time INTEGER.
l_start := DBMS_UTILITY.get_time;
FOR i IN 1 .. l_loops LOOP
l_integer1 := l_integer1 + l_integer2;
END LOOP;
DBMS_OUTPUT.put_line('INTEGER : ' ||
(DBMS_UTILITY.get_time - l_start) || ' hsecs');
-- Time PLS_INTEGER.
l_start := DBMS_UTILITY.get_time;
FOR i IN 1 .. l_loops LOOP
l_pls_integer1 := l_pls_integer1 + l_pls_integer2;
END LOOP;
DBMS_OUTPUT.put_line('PLS_INTEGER : ' ||
(DBMS_UTILITY.get_time - l_start) || ' hsecs');
-- Time BINARY_INTEGER.
l_start := DBMS_UTILITY.get_time;
FOR i IN 1 .. l_loops LOOP
l_binary_integer1 := l_binary_integer1 + l_binary_integer2;
END LOOP;
DBMS_OUTPUT.put_line('BINARY_INTEGER : ' ||
(DBMS_UTILITY.get_time - l_start) || ' hsecs');
-- Time SIMPLE_INTEGER.
l_start := DBMS_UTILITY.get_time;
FOR i IN 1 .. l_loops LOOP
l_simple_integer1 := l_simple_integer1 + l_simple_integer2;
END LOOP;
DBMS_OUTPUT.put_line('SIMPLE_INTEGER : ' ||
(DBMS_UTILITY.get_time - l_start) || ' hsecs');
END;
/
NUMBER : 24 hsecs
INTEGER : 44 hsecs
PLS_INTEGER : 9 hsecs
BINARY_INTEGER : 9 hsecs
SIMPLE_INTEGER : 8 hsecs
PL/SQL procedure successfully completed.
SQL>123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
SET SERVEROUTPUT ON
DECLARE
l_number1 NUMBER := 1.1;
l_number2 NUMBER := 1.1;
l_binary_float1 BINARY_FLOAT := 1.1;
l_binary_float2 BINARY_FLOAT := 1.1;
l_simple_float1 SIMPLE_FLOAT := 1.1;
l_simple_float2 SIMPLE_FLOAT := 1.1;
l_binary_double1 BINARY_DOUBLE := 1.1;
l_binary_double2 BINARY_DOUBLE := 1.1;
l_simple_double1 SIMPLE_DOUBLE := 1.1;
l_simple_double2 SIMPLE_DOUBLE := 1.1;
l_loops NUMBER := 10000000;
l_start NUMBER;
BEGIN
-- Time NUMBER.
l_start := DBMS_UTILITY.get_time;
FOR i IN 1 .. l_loops LOOP
l_number1 := l_number1 + l_number2;
END LOOP;
DBMS_OUTPUT.put_line('NUMBER : ' ||
(DBMS_UTILITY.get_time - l_start) || ' hsecs');
-- Time BINARY_FLOAT.
l_start := DBMS_UTILITY.get_time;
FOR i IN 1 .. l_loops LOOP
l_binary_float1 := l_binary_float1 + l_binary_float2;
END LOOP;
DBMS_OUTPUT.put_line('BINARY_FLOAT : ' ||
(DBMS_UTILITY.get_time - l_start) || ' hsecs');
-- Time SIMPLE_FLOAT.
l_start := DBMS_UTILITY.get_time;
FOR i IN 1 .. l_loops LOOP
l_simple_float1 := l_simple_float1 + l_simple_float2;
END LOOP;
DBMS_OUTPUT.put_line('SIMPLE_FLOAT : ' ||
(DBMS_UTILITY.get_time - l_start) || ' hsecs');
-- Time BINARY_DOUBLE.
l_start := DBMS_UTILITY.get_time;
FOR i IN 1 .. l_loops LOOP
l_binary_double1 := l_binary_double1 + l_binary_double2;
END LOOP;
DBMS_OUTPUT.put_line('BINARY_DOUBLE : ' ||
(DBMS_UTILITY.get_time - l_start) || ' hsecs');
-- Time SIMPLE_DOUBLE.
l_start := DBMS_UTILITY.get_time;
FOR i IN 1 .. l_loops LOOP
l_simple_double1 := l_simple_double1 + l_simple_double2;
END LOOP;
DBMS_OUTPUT.put_line('SIMPLE_DOUBLE : ' ||
(DBMS_UTILITY.get_time - l_start) || ' hsecs');
END;
/
NUMBER : 26 hsecs
BINARY_FLOAT : 14 hsecs
SIMPLE_FLOAT : 14 hsecs
BINARY_DOUBLE : 15 hsecs
SIMPLE_DOUBLE : 14 hsecs
PL/SQL procedure successfully completed.
SQL>Please to add comments
No comments yet. Be the first to comment!