14. September 2007

Neuer PL/SQL-Datentyp: SIMPLE_INTEGER

In Oracle11g gibt es für PL/SQL einige Verbesserungen und Erweiterungen in der Sprache ... eine davon ist der neue Datentyp SIMPLE_INTEGER - hierzu ein Beispiel:

set timing on

/*
 * Der Performancevorteil von SIMPLE_INTEGER ergibt sich nur bei NATIVE 
 * kompiliertem PL/SQL Code; daher wird PLSQL_CODE_TYPE auf "NATIVE"
 * gesetzt. Im Vergleich zu Oracle9i oder Oracle10g ist dies die einzige
 * Einstellung, die für Native-Compilation erforderlich ist.
 */

alter session set plsql_code_type='NATIVE'
/

create or replace procedure count_simpleinteger is
  a simple_integer := 0;
  b simple_integer := 0;
begin
  while a < 100000 loop
   while b < 10000 loop
    b := b + 1;
   end loop;
   a := a + 1;
   b := 0;
  end loop;
end;
/
sho err


create or replace procedure count_plsinteger is
  a pls_integer := 0;
  b pls_integer := 0;
begin
  while a < 100000 loop
   while b < 10000 loop
    b := b + 1;
   end loop;
   a := a + 1;
   b := 0;
  end loop;
end;
/
sho err

prompt '** COUNTING with PLS_INTEGER ...'
    
exec count_plsinteger

prompt '** COUNTING with the new SIMPLE_INTEGER ...'

exec count_simpleinteger

... und die Ausgabe ist dann ...

:
:

'** COUNTING with PLS_INTEGER ...'

PL/SQL-Prozedur erfolgreich abgeschlossen.

Abgelaufen: 00:00:03.44
'** COUNTING with the new SIMPLE_INTEGER ...'

PL/SQL-Prozedur erfolgreich abgeschlossen.

Abgelaufen: 00:00:00.92
An diesem Beispiel ist gut erkennbar: Arbeitet man mit "Native Compiled" PL/SQL, dann ist SIMPLE_INTEGER massiv schneller als PLS_INTEGER. Im interpretieren Modus ergibt sich so gut wie kein Vorteil. Das liegt daran, dass SIMPLE_INTEGER sehr hardwarenah implementiert ist - ein Nebeneffekt ist, dass SIMPLE_INTEGER kein SQL NULL kennt - Variablen dieses Typs müssen daher schon bei Deklaration initialisiert werden.

Keine Kommentare:

Beliebte Postings