Używając SQLcl z bazą danych Oracle, możesz wyeksportować wyniki zapytania do pliku XML za pomocą SPOOL
polecenie.
Przykład
Oto przykład do zademonstrowania:
SET SQLFORMAT xml;
SPOOL '/Users/barney/data/regions.xml';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole;
Oto, co zrobił, linia po linii:
- Pierwszy wiersz ustawia
SQLFORMAT
doxml
. Gwarantuje to, że nasz wynikowy plik.xml
plik faktycznie zawiera XML. - Druga linia używa
SPOOL
polecenie, aby określić, gdzie zostanie zapisany plik wyjściowy. Pamiętaj, aby zmienić/Users/barney/data/regions.xml
do lokalizacji w systemie i odpowiedniej nazwy pliku. - W trzecim wierszu uruchomiłem zapytanie SQL – wyniki, dla których eksportuję. W tym przypadku wyeksportowałem całe
regions
stół. - Następnie zmieniłem
SPOOL
wyłączony. - Na koniec ustawiłem
SQLFORMAT
z powrotem do mojego pierwotnego ustawienia, którym byłoansiconsole
. Jest to opcjonalne – możesz zostawić go wjson
jeśli wolisz, lub zmień to na coś innego.
Oto jak wygląda wynikowy plik:
<?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.
Usuń opinię
Możesz usunąć X rows selected
z 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;
Wynik:
<?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>
W tym przypadku włączyłem FEEDBACK
ponownie po wyeksportowaniu pliku.
Dołącz wyniki
Domyślnie SPOOL
używa REPLACE
, który zastępuje plik, jeśli już istnieje.
Możemy jednak użyć APPEND
argument, aby dołączyć wyniki do pliku.
Przykład:
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;
Wynikowy plik:
<?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>
Ten przykład dołączył wyniki do pliku, który został utworzony (i wypełniony) w poprzednim przykładzie. Spowodowało to zduplikowanie wyników zapytania w pliku.
Zastąp istniejący plik
Możemy użyć REPLACE
aby nadpisać istniejący plik wynikami nowego zapytania:
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;
Wynikowy plik:
<?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>
Jak wspomniano, REPLACE
jest ustawieniem domyślnym, więc mogliśmy po prostu całkowicie pominąć ten argument.