1.计算密集型(cpu-bound)
DECLARE
N PLS_INTEGER := 0;
A1 PLS_INTEGER;
A2 PLS_INTEGER;
A3 PLS_INTEGER;
A4 PLS_INTEGER;
BEGIN
A1 := DBMS_UTILITY.GET_CPU_TIME;
A3 := DBMS_UTILITY.GET_TIME;
FOR I IN 1 .. 100000000 LOOP
N := N + 1;
END LOOP;
A2 := DBMS_UTILITY.GET_CPU_TIME;
A4 := DBMS_UTILITY.GET_TIME;
DBMS_OUTPUT.PUT_LINE(A2 - A1);
DBMS_OUTPUT.PUT_LINE(A4 - A3);
END;
输出:
GET_CPU_TIME:123
GET_TIME:124
2.I/O密集型
DECLARE
N PLS_INTEGER := 0;
A1 PLS_INTEGER;
A2 PLS_INTEGER;
A3 PLS_INTEGER;
A4 PLS_INTEGER;
BEGIN
A1 := DBMS_UTILITY.GET_CPU_TIME;
A3 := DBMS_UTILITY.GET_TIME;
FOR I IN (SELECT * FROM all_source) LOOP
NULL;
END LOOP;
A2 := DBMS_UTILITY.GET_CPU_TIME;
A4 := DBMS_UTILITY.GET_TIME;
DBMS_OUTPUT.PUT_LINE('GET_CPU_TIME:' || (A2 - A1));
DBMS_OUTPUT.PUT_LINE('GET_TIME:' || (A4 - A3));
END;
输出:GET_CPU_TIME:147
GET_TIME:169
DBMS_UTILITY.GET_TIME 为总消耗时间.
DBMS_UTILITY.GET_CPU_TIME为使用的cpu时间,在cpu密集操作时,两者的结果几乎一致.
两者返回的时间单位均为百分之一秒
:1)pls_integer类型也是数字类型,但和number类型不同,number可以存储实数,而pls_integer只能存储-2147483647到+2147483647之间的整数,如果使用pls_integer类型时发生溢出,系统将会报错。
2)binary_integer与pls_integer类似,在9.2版本以前大量使用,从9.2以后,从Oracle内部一些组件可以看的出,大有被pls_integer取代之势(pls_integer比binary_integer具有更少的存储开销和更好的访问性能,所以Oracle从9.2以后推荐你尽量能使用pls_integer就使用pls_integer)。它也是只能存储-2147483647到+2147483647之间的整数。
3)在oracle 11g中,又增加了一个新的类似的数据类型simple_integer,不过simple_integer不能包含空值,它的取值范围是[-2147483648..2147483647]。在11g中,simple_integer相对pls_integer在性能上又有所提高,如果在实际的pl/sql中既不需要overflow检查也不会包含null值,Oracle建议你使用simple_integer.