Domyślam się, że przekazujesz XML jako literał do instrukcji insert. SQL Oracle może obsłużyć maksymalnie 4000 znaków w literale. W przeciwnym razie musisz użyć zmiennych wiążących i przekazywać je porcjami. Możesz też użyć PL/SQL.
Na przykład powinno to działać bez problemu, ponieważ dosłowny
<MyMessage>Meeesaaagee</MyMessage>
ma tylko 34 znaki:
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 jeśli miałeś:Meeesaaagee (+ 3976 dodatkowych znaków)
Otrzymasz błąd ORA-01704:ciąg znaków za długi.
Możesz spróbować:
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;
/
Zrób to bez kodu PL/SQL i aby używać zmiennych wiążących, cóż, musiałbyś porozmawiać z programistą aplikacji. Jest poza Oracle (i poza moją wiedzą).