Benchmarkfunktion (PL/SQL)

In MySQL gibt es die nützliche Funktion benchmark(), welche beliebig häufig einen bestimmten Befehl ausführt. Oracle verfügt meines Wissens leider nich über eine solche Funktion, aber man kann Sie recht einfach nachbauen.

create or replace function benchmark (nanzahl in number, sbefehl in varchar2) return number is
  nzaehler number;
begin
  nzaehler := 0;
  loop
    execute immediate 'select '|| sbefehl || ' from dual';
  nzaehler := nzaehler + 1;
  exit when nzaehler = nanzahl;
  end loop;
  return 0;
end;
/

Der Zugriff erfolgt so:

SELECT
  benchmark(1000,'upper(''Marcel Normann'')')
FROM
  dual;

Bei diesem Beispiel wird 1000 mal die Funktion upper('Marcel Normann') aus der Pseudotabelle DUAL selektiert. Ein Blick auf die Laufzeit würde hier z.B. verraten, ob es sinnvoller ist, upper() oder lower() zu verwenden.