sql >> Database >  >> RDS >> Oracle

ORA-01704:tekenreeks letterlijk te lang 'Fout bij het invoegen van XML-document in Oracle XMLTYPE-kolomtype'

Ik vermoed dat je de XML als een letterlijke waarde doorgeeft aan de insert-instructie. Oracle's SQL kan maximaal 4000 karakters in een letterlijke tekst verwerken. Anders moet u bindvariabelen gebruiken en deze in brokken doorgeven. Of u kunt PL/SQL gebruiken.

Dit zou bijvoorbeeld probleemloos moeten werken omdat de letterlijke

<MyMessage>Meeesaaagee</MyMessage> 

is slechts 34 tekens:

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;

Maar als je had:Meeesaaagee (+ 3976 extra tekens)

U krijgt de ORA-01704:string letterlijk te lang fout.

Je zou kunnen proberen:

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;
/

Doe het zonder PL/SQL-code en om bindvariabelen te gebruiken, zou je met een applicatieontwikkelaar moeten praten. Het ligt buiten Oracle (en buiten mijn kennis).



  1. Een tussenliggende MySQL- of MariaDB-master vervangen door een Binlog-server met MaxScale

  2. Hoe u alle tabellen kunt ophalen met een primaire sleutelbeperking die is gemaakt in de SQL Server-database - SQL Server / TSQL-zelfstudie 57

  3. Specificeer SSL voor Heroku externe MySQL-databaseverbinding

  4. MySQL-buitenlandse sleutels