Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Xuất kết quả truy vấn sang tệp XML khi sử dụng SQLcl (Oracle)

Khi sử dụng SQLcl với Cơ sở dữ liệu Oracle, bạn có thể xuất kết quả truy vấn của mình sang tệp XML với SPOOL lệnh.

Ví dụ

Dưới đây là một ví dụ để chứng minh:

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

Đây là những gì nó đã làm, từng dòng một:

  • Dòng đầu tiên đặt SQLFORMAT thành xml . Điều này đảm bảo rằng .xml kết quả của chúng tôi trên thực tế, tệp có chứa XML.
  • Dòng thứ hai sử dụng SPOOL lệnh để chỉ định nơi tệp đầu ra sẽ được ghi. Đảm bảo thay đổi /Users/barney/data/regions.xml đến một vị trí trên hệ thống của bạn và một tên tệp thích hợp.
  • Trên dòng thứ ba, tôi đã chạy truy vấn SQL - kết quả mà tôi đang xuất. Trong trường hợp này, tôi đã xuất toàn bộ regions bảng.
  • Tiếp theo, tôi đã chuyển SPOOL tắt.
  • Cuối cùng, tôi đặt SQLFORMAT quay lại cài đặt ban đầu của tôi, đó là ansiconsole . Đây là tùy chọn - bạn có thể để nó tại json nếu bạn thích hoặc thay đổi nó thành thứ khác.

Đây là tệp kết quả trông như thế nào:

<?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. 

Xóa phản hồi

Bạn có thể xóa X rows selected khi tắt 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;

Kết quả:

<?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>

Trong trường hợp này, tôi đã chuyển FEEDBACK quay lại sau khi xuất tệp.

Nối kết quả

Theo mặc định, SPOOL sử dụng REPLACE , sẽ thay thế tệp nếu nó đã tồn tại.

Tuy nhiên, chúng tôi có thể sử dụng APPEND đối số để nối kết quả vào tệp.

Ví dụ:

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;

Tệp kết quả:

<?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>

Ví dụ này đã nối kết quả vào tệp đã được tạo (và được điền) trong ví dụ trước. Điều này dẫn đến kết quả truy vấn bị trùng lặp trong tệp.

Ghi đè tệp hiện có

Chúng tôi có thể sử dụng REPLACE để ghi đè lên tệp hiện có bằng kết quả của một truy vấn mới:

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;

Tệp kết quả:

<?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>

Như đã đề cập, REPLACE là cài đặt mặc định, vì vậy chúng tôi có thể đơn giản bỏ qua hoàn toàn đối số này.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-06508:PL / SQL:không thể tìm thấy đơn vị chương trình đang được gọi

  2. Ghi nhật ký truy vấn SQL của Oracle

  3. Cách xuất kết quả truy vấn sang tệp .txt khi sử dụng SQLcl (Oracle)

  4. Làm cách nào để tìm các đặc quyền và vai trò được cấp cho người dùng trong Oracle?

  5. Lặp lại một Tập kết quả bằng JDBC cho Oracle mất rất nhiều thời gian khoảng 16 giây?