Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Memuat data XML mendapat kesalahan dengan mengatakan file kontrol saya merujuk pada bidang yang tidak ada

Anda tampaknya mencampuradukkan beberapa cara untuk melakukan ini. Kesalahannya adalah karena mencoba menafsirkan "test_file.xml" di dalam LOBFILE() sebagai referensi lapangan.

Jika Anda tahu bahwa Anda hanya akan memuat satu dokumen XML dari satu file teks, Anda dapat membuat file kontrol Anda:

LOAD DATA
INFILE *
append INTO TABLE TEST_XML
XMLType(XMLDATA)
FIELDS
(
    FILL FILLER CHAR(1),
    XMLDATA LOBFILE(CONSTANT test_file.xml) TERMINATED BY EOF
)
BEGINDATA
0

BEGINDATA bagian memiliki baris dengan karakter pengisi untuk setiap dokumen XML dalam file, dan karena hanya ada satu, ada satu pengisi.

Perhatikan CONSTANT yang membuatnya mencari file bernama itu, bukan bidang. File log menunjukkan nama statis itu:

Table TEST_XML, loaded from every logical record.
Insert option in effect for this table: APPEND

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
FILL                                FIRST     1           CHARACTER
  (FILLER FIELD)
XMLDATA                           DERIVED     *  EOF      CHARACTER
    Static LOBFILE.  Filename is test_file.xml


Table TEST_XML:
  1 Row successfully loaded.
  0 Rows not loaded due to data errors.
  0 Rows not loaded because all WHEN clauses were failed.
  0 Rows not loaded because all fields were null.

Untuk menggunakan bidang Anda akan memiliki file data dengan nama file, sebut saja test_loading.dat untuk mencocokkan nama file kontrol, yang berisi:

test_file.xml

Dan file kontrol yang menggunakannya sebagai INFILE, dan konten bidang pertamanya sebagai nama file:

LOAD DATA
INFILE test_loading.dat
append INTO TABLE TEST_XML
XMLType(XMLDATA)
FIELDS
(
    filename FILLER CHAR(30),
    XMLDATA LOBFILE(filename) TERMINATED BY EOF
)

Kali ini file log menunjukkan nama sedang diambil secara dinamis:

Table TEST_XML, loaded from every logical record.
Insert option in effect for this table: APPEND

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
FILENAME                            FIRST    30           CHARACTER
  (FILLER FIELD)
XMLDATA                           DERIVED     *  EOF      CHARACTER
    Dynamic LOBFILE.  Filename in field FILENAME


Table TEST_XML:
  1 Row successfully loaded.
  0 Rows not loaded due to data errors.
  0 Rows not loaded because all WHEN clauses were failed.
  0 Rows not loaded because all fields were null.

Baca selengkapnya di dokumentasi .

Keduanya akan bekerja untuk Anda. Karena Anda hanya memiliki satu file dalam contoh Anda, versi pertama mungkin sedikit lebih sederhana, tetapi jika Anda akan memuat banyak file (dengan baris tabel per file), versi kedua lebih berguna.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jumlah baris Oracle tabel dengan count(*) vs NUM_ROWS dari DBA_TABLES

  2. Ekstrak stempel waktu lengkap (termasuk tanggal) dari kueri Pilih; Peramal

  3. Buat kunci utama unik (hash) dari kolom database

  4. Permintaan Oracle untuk mendapatkan ID transaksi pertama berdasarkan transaksi keluar yang dikonsumsi

  5. Bagaimana saya bisa memperbarui data di bidang CLOB menggunakan>> kueri yang disiapkan <<dengan ODP (Oracle.DataAccess)?