2017-11-16 2 views
0

Ich benutze den Spool-Befehl in sqlplus, um eine Datei mit den Zeilen einiger Abfragen zu generieren.Der Spool-Befehl speichert nicht alle Zeilen in sql plus

Zuerst ich ein Ausgabeformat zuweisen und zweitens mache ich die Spool, um die Ausgabedatei zu generieren, aber es speichert nicht alle Zeilen.

set lines 100 
set pages 1500 
set colsep ';' 
spool /home/bsoinst/users/example.txt 

select name,salary from employees (Abfrage Beispiel)

Die ursprüngliche Abfrage generiert 1433 Zeilen, aber es zeigt nur 1414

Dank

+0

Sie haben die Abfrage ausgeführt, um 1433 Zeilen und die gespoolte Version in derselben Sitzung zu erhalten? Falls dies der Fall sein sollte, wurden andere Änderungen zwischendurch vorgenommen; Und wenn nicht, gab es in einer der Sessions nicht festgeschriebene Änderungen? Und bist du sicher, dass es genau die gleiche Abfrage war - eine war nicht "distinct" oder eine andere Gruppierung oder so? –

+0

Danke für die Antwort. Wenn die Abfrage in derselben Sitzung ausgeführt wurde. Ich habe versucht, die Abfrage aus einer Datei auszuführen, und es scheint, dass ein paar Zeilen erschienen. – Macgregor

+0

Wenn Sie noch in dieser Sitzung angemeldet sind, haben Sie 'spool off' gemacht? Wenn nicht alles, was Sie jetzt eingeben, noch in die Datei geht - aber es ist gepuffert, wird also nicht sofort auf die Festplatte geschrieben ... –

Antwort

0

Spool schreibt in eine Datei, aber die Ausgabe ist in der Datei gepuffert. Wenn Sie von einer interaktiven Sitzung spulen, wie Sie es gezeigt haben, bis Sie entweder die Sitzung beenden oder die Spool mit spool off beenden (oder eine andere Spool starten), tun Sie alles, was Sie tun is still being written to the file, über den Puffer.

SQL * Plus weiterhin Informationen in die Datei spulen, bis Sie weg biegen Spooling ...

bis der Puffer voll ist, wird es nicht auf das Dateisystem gespült werden. Wenn Sie sich die Datei anschauen, wird sie unvollständig sein.

Wenn Sie das tun:

spool off 

dann die restlichen Teil-Puffer gespült werden und die Datei geschlossen wird, und werden dann auf dem Dateisystem zu vervollständigen. (Sie sehen nun auch alles, was Sie zwischen dem Ausführen der Abfrage und dem Ausgeben dieses Befehls getan haben).

Ich glaube, dass die Puffergröße Betriebssystem/Dateisystem-abhängig ist, und nicht etwas, das Sie aus SQL * Plus steuern können.

+0

danke, ich hatte die Spule nicht ausgeschaltet. Ich habe es platziert und jetzt, wenn es alle Zeilen behält. – Macgregor