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

ORA-01704:streng bogstavelig for lang 'Fejl ved indsættelse af XML-dokument i Oracle XMLTYPE kolonnetype'

Mit gæt er, at du videregiver XML'en som en bogstavelig til indsættelseserklæringen. Oracles SQL kan kun håndtere op til 4000 tegn i en bogstavelig. Ellers skal du bruge bindevariabler og videregive dem i bidder. Eller du kan bruge PL/SQL.

For eksempel skulle dette fungere uden problemer, fordi den bogstavelige

<MyMessage>Meeesaaagee</MyMessage> 

er kun 34 tegn:

CREATE TABLE TEST_REPORTS
(
   ID            NUMBER,
   DESCRIPTION   VARCHAR2 (50),
   XML           XMLTYPE NULL
);

INSERT INTO TEST_REPORTS (ID, DESCRIPTION, XML)
     VALUES (1, 'BLAH BLAH', XMLTYPE.CREATEXML ('<MyMessage>Meeesaaagee</MyMessage>'));

COMMIT;

Men hvis du havde:Meeesaaagee (+ 3976 ekstra tegn)

Du får fejlen ORA-01704:streng bogstavelig talt for lang.

Du kan prøve:

DECLARE
    in_xml_value varchar2(32767);
BEGIN
    in_xml_value := '<MyMessage>MeeesaaageeBLAHBLAHBLAH<--repeat--></MyMessage>';
    INSERT INTO TEST_REPORTS (ID, DESCRIPTION, XML)
     VALUES (1, 'BLAH BLAH', XMLTYPE.CREATEXML (in_xml_value);
    commit;
END;
/

Gør det uden PL/SQL-kode og for at bruge bindevariabler, så skal du tale med en applikationsudvikler. Det er uden for Oracle (og uden for min viden).



  1. MySQL-opdatering, spring tomme felter over med PDO

  2. Django, får adgang til PostgreSQL-sekvensen

  3. returnere rækker, hvor summen på et felt er mindre end en given værdi

  4. Test for nul i funktion med varierende parametre