sql >> Databáze >  >> RDS >> Oracle

ORA-01704:Řetězcový literál je příliš dlouhý 'Chyba při vkládání dokumentu XML do typu sloupce Oracle XMLTYPE'

Hádám, že předáváte XML jako doslovný příkaz vložit. Oracle SQL dokáže zpracovat pouze až 4000 znaků v literálu. V opačném případě musíte použít proměnné vazby a předávat je po částech. Nebo můžete použít PL/SQL.

Například by to mělo fungovat bez problémů, protože doslovné

<MyMessage>Meeesaaagee</MyMessage> 

je pouze 34 znaků:

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;

Ale pokud jste měli:Meeesaaagee (+ 3976 znaků navíc)

Zobrazí se chyba ORA-01704:řetězcový literál příliš dlouhý.

Můžete zkusit:

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

Udělejte to bez kódu PL/SQL a pokud chcete použít proměnné vazby, musíte si promluvit s vývojářem aplikace. Je mimo Oracle (a mimo mé znalosti).



  1. Operace není platná pro stav chyby transakce a rozsah transakce

  2. Měření online času na webu

  3. Jak sjednotit seznam tabulek načtených z jiné tabulky jediným dotazem?

  4. The Adaptive Join Threshold