パラメータに対して多くのSUBSTR
s を実行する PL/SQL プロシージャがありVARCHAR2
ます。長さ制限をなくしたいので、 に変更してみましたCLOB
。
正常に動作しますが、パフォーマンスが低下するため、いくつかのテストを行いました ( 2005 年のこれらのテストに基づいています)。
更新: 異なる Oracle バージョンと異なるハードウェアを備えたいくつかの異なるインスタンスでこれを再現できdbms_lob.substr
ます。substr(CLOB)
SUBSTR(VARCHAR2)
ボブの結果と上記のリンクのテストは、別の話をしています。
誰かがこれを説明できますか、または少なくともボブまたは私の結果を再現できますか? ありがとう!
試験結果:
+000000000 00:00:00. 004000000 (VARCHAR2)
+000000000 00:00:00. 298000000 (CLOB SUBSTR)
+000000000 00:00:00. 356000000 (DBMS_LOB.SUBSTR)
テストコード:
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;