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).