Oracle
 sql >> база данни >  >> RDS >> Oracle

Зареждането на XML данни получава грешка, че моят контролен файл препраща към несъществуващо поле

Изглежда, че смесвате няколко начина да направите това. Грешката е, защото се опитва да интерпретира "test_file.xml" вътре LOBFILE() като препратка към поле.

Ако знаете, че ще заредите само един XML документ от един текстов файл, можете да направите свой контролен файл:

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 има ред със знак за пълнене за всеки XML документ във файла и тъй като има само един, има един пълнител.

Обърнете внимание на CONSTANT което го кара да търси файл, наречен така, а не поле. Регистрационният файл показва това статично име:

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.

За да използвате поле, трябва да имате файл с данни с името на файла, нека го наречем test_loading.dat за да съответства на името на контролния файл, който съдържа:

test_file.xml

И контролен файл, който използва това като INFILE и съдържанието на първото поле като име на файл:

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

Този път регистрационният файл показва, че името се извлича динамично:

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.

Прочетете повече в документацията .

И двете ще ви свършат работа. Тъй като имате само един файл във вашия пример, първата версия може да е малко по-опростена, но ако ще зареждате множество файлове (с ред таблица на файл), втората версия е по-полезна.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. върнете набор от резултати от функцията

  2. Как да получа идентификатор за последно вмъкване в Oracle с помощта на MyBatis?

  3. Намерете стойности, които не съществуват в таблица

  4. Как да премахнете част от низа в oracle

  5. Промиване на единичен курсор