Возможно, вы обнаружите, что использовать UTL_FILE быстрее, но, вероятно, не намного быстрее.
в моем тесте он был немного быстрее, примерно на 20 тыс. строк, но, может быть, оно того стоит.
Я верю, что если вы хотите получить что-то быстрее, чем этот, путь будет простым ... но я не вдавался в это, поэтому не могу посоветовать.
set pagesize 1000
set FLUSH OFF
drop user usera cascade;
create user usera default tablespace users identified by abc123;
grant create session to usera;
grant resource to usera;
create or replace directory testdir as '/tmp';
grant read,write on directory testdir to usera;
grant execute on UTL_FILE to usera;
connect usera/abc123;
set timing on
spool /tmp/spooltest.txt
select object_name from all_objects;
spool off
DECLARE
v_file UTL_FILE.FILE_TYPE;
TYPE t_col is table of all_objects.object_name%type index by PLS_INTEGER;
v_object_names t_col;
BEGIN
v_file := UTL_FILE.FOPEN('TESTDIR','utlfiletext.txt','w');
select object_name BULK COLLECT INTO v_object_names
from all_objects;
for idx IN 1 .. v_object_names.COUNT LOOP
UTL_FILE.PUT_LINE(v_file, v_object_names(idx), FALSE);
END LOOP;
UTL_FILE.FCLOSE(v_file);
END;
/
Результаты, достижения. Верхний результат получен только из sqlplus, нижний - с использованием UTL_FILE
23931 rows selected.
Elapsed: 00:00:06.60
PL/SQL procedure successfully completed.
Elapsed: 00:00:05.45
person
Matthew Watson
schedule
02.04.2010