sql >> Database teknologi >  >> RDS >> Oracle

Indlæsning af XML-data får fejl, der siger, at min kontrolfil refererer til et ikke-eksisterende felt

Du lader til at blande et par måder at gøre dette på. Fejlen skyldes, at den forsøger at fortolke "test_file.xml" inde i LOBFILE() som feltreference.

Hvis du ved, at du kun vil indlæse ét XML-dokument fra en enkelt tekstfil, kan du lave din kontrolfil:

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 sektionen har en række med et fyldtegn for hvert XML-dokument i filen, og da der kun er én, er der et enkelt fyldstof.

Bemærk CONSTANT hvilket får den til at lede efter en fil kaldet det, ikke et felt. Logfilen viser det statiske navn:

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.

For at bruge et felt vil du have en datafil med filnavnet, lad os kalde det test_loading.dat for at matche kontrolfilnavnet, som indeholder:

test_file.xml

Og en kontrolfil, der bruger det som INFILE, og indholdet af dets første felt som filnavn:

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

Denne gang viser logfilen, at navnet hentes dynamisk:

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.

Læs mere i dokumentationen .

Begge vil virke for dig. Da du kun har en enkelt fil i dit eksempel, kan den første version være lidt enklere, men hvis du vil indlæse flere filer (med en tabelrække pr. fil), er den anden version mere nyttig.




  1. Gruppér efter bruger og vis seneste i MYSQL virker ikke

  2. ORACLE SQL select distinct fjerner ikke dubletter

  3. Fejl i dynamisk sætning PL/PGSQL (funktioner og operatorer kan højst tage ét sæt argument)

  4. Hvordan bruger man LOAD DATA INFILE-sætning, når filen er en anden placering?