sql >> Databasteknik >  >> RDS >> Oracle

ORA-01704:sträng bokstavlig för lång 'Fel vid infogning av XML-dokument i Oracle XMLTYPE kolumntyp'

Min gissning är att du skickar XML som en bokstavlig bokstav till insert-satsen. Oracles SQL kan bara hantera upp till 4000 tecken i en bokstavlig. Annars måste du använda bindningsvariabler och skicka det i bitar. Eller så kan du använda PL/SQL.

Detta bör till exempel fungera utan problem eftersom den bokstavliga

<MyMessage>Meeesaaagee</MyMessage> 

är bara 34 tecken:

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 om du hade:Meeesaaagee (+ 3976 extra tecken)

Du kommer att få felmeddelandet ORA-01704:string literal too long.

Du kan prova:

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 utan PL/SQL-kod och för att använda bindningsvariabler måste du prata med en applikationsutvecklare. Det är utanför Oracle (och utanför min kunskap).



  1. Odefinierad indexbild i php

  2. Kan inte ansluta till mysql med 127.0.0.1

  3. Förekommer MySQL-cache, hur fixar jag det?

  4. Hur kan jag undvika hakparenteser i en LIKE-sats?