Leistung von SUBSTR auf CLOB

Ich habe eine PL / SQL-Prozedur, die viel leistetSUBSTRs auf aVARCHAR2 Parameter. Ich möchte das Längenlimit entfernen und habe versucht, es in zu ändernCLOB.

Funktioniert gut, aber die Leistung leidet, also habe ich einige Tests durchgeführt (basierend aufdiese Tests ab 2005).

AKTUALISIEREN: Ich kann dies auf verschiedenen Instanzen mit verschiedenen Oracle-Versionen und unterschiedlicher Hardware reproduzieren,dbms_lob.substr fällt immer langsamer auf alssubstr(CLOB)und viel langsamer alsSUBSTR(VARCHAR2).

Bobs Ergebnisse und die Tests im obigen Link erzählen eine andere Geschichte.

Kann jemand dies erklären oder zumindest die Ergebnisse von Bob oder mir reproduzieren? Vielen Dank!

Testergebnisse:

+000000000 00:00:00.004000000 (VARCHAR2)
+000000000 00:00:00.298000000 (CLOB SUBSTR)
+000000000 00:00:00.356000000 (DBMS_LOB.SUBSTR)

Testcode:

<code>DECLARE
  l_text   VARCHAR2(30) := 'This is a test record';
  l_clob   CLOB := l_text;
  l_substr VARCHAR2(30);
  t TIMESTAMP;
BEGIN
  t := SYSTIMESTAMP;
  FOR i IN 1..100000 LOOP
    l_substr := SUBSTR(l_text,1,14);
  END LOOP;
  dbms_output.put_line( SYSTIMESTAMP - t || ' (VARCHAR2)');

  t := SYSTIMESTAMP;
  FOR i IN 1..100000 LOOP
    l_substr := SUBSTR(l_clob,1,14);
  END LOOP;
  dbms_output.put_line( SYSTIMESTAMP - t || ' (CLOB SUBSTR)');

  t := SYSTIMESTAMP;
  FOR i IN 1..100000 LOOP
    l_substr := DBMS_LOB.SUBSTR(l_clob,14,1);
  END LOOP;
  dbms_output.put_line( SYSTIMESTAMP - t || ' (DBMS_LOB.SUBSTR)');
END;
</code>

Antworten auf die Frage(4)

Ihre Antwort auf die Frage