Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Abfrageergebnisse bei Verwendung von SQLcl (Oracle) in eine XML-Datei exportieren

Wenn Sie SQLcl mit Oracle Database verwenden, können Sie Ihre Abfrageergebnisse mit SPOOL in eine XML-Datei exportieren Befehl.

Beispiel

Hier ist ein Beispiel zur Veranschaulichung:

SET SQLFORMAT xml;
SPOOL '/Users/barney/data/regions.xml';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole;

Hier ist, was es getan hat, Zeile für Zeile:

  • Die erste Zeile setzt SQLFORMAT zu xml . Dadurch wird sichergestellt, dass unsere resultierende .xml Datei enthält tatsächlich XML.
  • Die zweite Zeile verwendet den SPOOL Befehl, um anzugeben, wohin die Ausgabedatei geschrieben werden soll. Achten Sie darauf, /Users/barney/data/regions.xml zu ändern an einen Speicherort auf Ihrem System und einen entsprechenden Dateinamen.
  • In der dritten Zeile habe ich die SQL-Abfrage ausgeführt – die Ergebnisse, für die ich exportiere. In diesem Fall habe ich die gesamten regions exportiert Tabelle.
  • Als nächstes drehte ich SPOOL aus.
  • Zuletzt setze ich SQLFORMAT zurück zu meiner ursprünglichen Einstellung, die ansiconsole war . Dies ist optional – Sie können es bei json belassen wenn Sie es vorziehen, oder ändern Sie es in etwas anderes.

So sieht die resultierende Datei aus:

<?xml version='1.0'  encoding='UTF-8' ?>
<RESULTS>
	<ROW>
		<COLUMN NAME="REGION_ID"><![CDATA[1]]></COLUMN>
		<COLUMN NAME="REGION_NAME"><![CDATA[Europe]]></COLUMN>
	</ROW>
	<ROW>
		<COLUMN NAME="REGION_ID"><![CDATA[2]]></COLUMN>
		<COLUMN NAME="REGION_NAME"><![CDATA[Americas]]></COLUMN>
	</ROW>
	<ROW>
		<COLUMN NAME="REGION_ID"><![CDATA[3]]></COLUMN>
		<COLUMN NAME="REGION_NAME"><![CDATA[Asia]]></COLUMN>
	</ROW>
	<ROW>
		<COLUMN NAME="REGION_ID"><![CDATA[4]]></COLUMN>
		<COLUMN NAME="REGION_NAME"><![CDATA[Middle East and Africa]]></COLUMN>
	</ROW>
</RESULTS>
4 rows selected. 

Feedback entfernen

Sie können das X rows selected mit SET FEEDBACK off :

SET SQLFORMAT xml;
SET FEEDBACK off;
SPOOL '/Users/barney/data/regions_feedback_off.xml';
SELECT * FROM regions;
SPOOL off;
SET FEEDBACK on;
SET SQLFORMAT ansiconsole;

Ergebnis:

<?xml version='1.0'  encoding='UTF-8' ?>
<RESULTS>
	<ROW>
		<COLUMN NAME="REGION_ID"><![CDATA[1]]></COLUMN>
		<COLUMN NAME="REGION_NAME"><![CDATA[Europe]]></COLUMN>
	</ROW>
	<ROW>
		<COLUMN NAME="REGION_ID"><![CDATA[2]]></COLUMN>
		<COLUMN NAME="REGION_NAME"><![CDATA[Americas]]></COLUMN>
	</ROW>
	<ROW>
		<COLUMN NAME="REGION_ID"><![CDATA[3]]></COLUMN>
		<COLUMN NAME="REGION_NAME"><![CDATA[Asia]]></COLUMN>
	</ROW>
	<ROW>
		<COLUMN NAME="REGION_ID"><![CDATA[4]]></COLUMN>
		<COLUMN NAME="REGION_NAME"><![CDATA[Middle East and Africa]]></COLUMN>
	</ROW>
</RESULTS>

In diesem Fall habe ich mich an FEEDBACK gewandt nach dem Exportieren der Datei wieder einschalten.

Fügen Sie die Ergebnisse hinzu

Standardmäßig SPOOL verwendet REPLACE , die die Datei ersetzt, falls sie bereits vorhanden ist.

Wir können jedoch das APPEND verwenden Argument, um die Ergebnisse an die Datei anzuhängen.

Beispiel:

SET SQLFORMAT xml;
SET FEEDBACK off;
SPOOL '/Users/barney/data/regions_feedback_off.xml' APPEND;
SELECT * FROM regions;
SPOOL off;
SET FEEDBACK on;
SET SQLFORMAT ansiconsole;

Ergebnisdatei:

<?xml version='1.0'  encoding='UTF-8' ?>
<RESULTS>
	<ROW>
		<COLUMN NAME="REGION_ID"><![CDATA[1]]></COLUMN>
		<COLUMN NAME="REGION_NAME"><![CDATA[Europe]]></COLUMN>
	</ROW>
	<ROW>
		<COLUMN NAME="REGION_ID"><![CDATA[2]]></COLUMN>
		<COLUMN NAME="REGION_NAME"><![CDATA[Americas]]></COLUMN>
	</ROW>
	<ROW>
		<COLUMN NAME="REGION_ID"><![CDATA[3]]></COLUMN>
		<COLUMN NAME="REGION_NAME"><![CDATA[Asia]]></COLUMN>
	</ROW>
	<ROW>
		<COLUMN NAME="REGION_ID"><![CDATA[4]]></COLUMN>
		<COLUMN NAME="REGION_NAME"><![CDATA[Middle East and Africa]]></COLUMN>
	</ROW>
</RESULTS>
<?xml version='1.0'  encoding='UTF-8' ?>
<RESULTS>
	<ROW>
		<COLUMN NAME="REGION_ID"><![CDATA[1]]></COLUMN>
		<COLUMN NAME="REGION_NAME"><![CDATA[Europe]]></COLUMN>
	</ROW>
	<ROW>
		<COLUMN NAME="REGION_ID"><![CDATA[2]]></COLUMN>
		<COLUMN NAME="REGION_NAME"><![CDATA[Americas]]></COLUMN>
	</ROW>
	<ROW>
		<COLUMN NAME="REGION_ID"><![CDATA[3]]></COLUMN>
		<COLUMN NAME="REGION_NAME"><![CDATA[Asia]]></COLUMN>
	</ROW>
	<ROW>
		<COLUMN NAME="REGION_ID"><![CDATA[4]]></COLUMN>
		<COLUMN NAME="REGION_NAME"><![CDATA[Middle East and Africa]]></COLUMN>
	</ROW>
</RESULTS>

In diesem Beispiel wurden die Ergebnisse an die Datei angehängt, die im vorherigen Beispiel erstellt (und gefüllt) wurde. Dies führte dazu, dass die Abfrageausgabe in der Datei dupliziert wurde.

Bestehende Datei überschreiben

Wir können REPLACE verwenden um die vorhandene Datei mit den Ergebnissen einer neuen Abfrage zu überschreiben:

SET SQLFORMAT xml;
SET FEEDBACK off;
SPOOL '/Users/barney/data/regions_feedback_off.xml' REPLACE;
SELECT * FROM regions;
SPOOL off;
SET FEEDBACK on;
SET SQLFORMAT ansiconsole;

Ergebnisdatei:

<?xml version='1.0'  encoding='UTF-8' ?>
<RESULTS>
	<ROW>
		<COLUMN NAME="REGION_ID"><![CDATA[1]]></COLUMN>
		<COLUMN NAME="REGION_NAME"><![CDATA[Europe]]></COLUMN>
	</ROW>
	<ROW>
		<COLUMN NAME="REGION_ID"><![CDATA[2]]></COLUMN>
		<COLUMN NAME="REGION_NAME"><![CDATA[Americas]]></COLUMN>
	</ROW>
	<ROW>
		<COLUMN NAME="REGION_ID"><![CDATA[3]]></COLUMN>
		<COLUMN NAME="REGION_NAME"><![CDATA[Asia]]></COLUMN>
	</ROW>
	<ROW>
		<COLUMN NAME="REGION_ID"><![CDATA[4]]></COLUMN>
		<COLUMN NAME="REGION_NAME"><![CDATA[Middle East and Africa]]></COLUMN>
	</ROW>
</RESULTS>

Wie bereits erwähnt, REPLACE ist die Standardeinstellung, also hätten wir dieses Argument einfach ganz weglassen können.