Vous pourriez trouver plus rapide d'utiliser UTL_FILE, mais probablement pas beaucoup plus vite. Dans mon test, il était légèrement plus rapide sur environ 20k de rangs, mais cela dépasse les 14 millions et cela en vaut peut-être la peine.
Je crois que si vous voulez obtenir plus rapidement que cela, le chemin à parcourir serait pro * c .. mais je ne suis pas entré dans cela, donc je ne peux pas vraiment le conseiller.
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;
/
Les résultats. Le meilleur résultat étant de sqlplus seulement, le fond en utilisant UTL_FILE
23931 rows selected.
Elapsed: 00:00:06.60
PL/SQL procedure successfully completed.
Elapsed: 00:00:05.45
Quelques bons conseils pour utiliser sql * plus ici, mais je dois demander: pourquoi bobiner autant par sql * plus? Créez une application simple pour le faire pour vous, puis vous aurez plus de contrôle sur la sortie, et il sera facile de réutiliser ou de modifier pour d'autres requêtes. Just sayin ' – nothingisnecessary