Предполагам, че предавате XML като литерал към израза за вмъкване. SQL на Oracle може да обработва само до 4000 знака в литерал. В противен случай трябва да използвате свързващи променливи и да ги предавате на части. Или можете да използвате PL/SQL.
Например, това трябва да работи без проблем, защото литерала
<MyMessage>Meeesaaagee</MyMessage>
е само 34 знака:
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;
Но ако имате:Meeesaaagee (+ 3976 допълнителни знака)
Ще получите грешката ORA-01704:твърде дълъг низов литерал.
Можете да опитате:
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;
/
Направете го без PL/SQL код и за да използвате свързващи променливи, трябва да говорите с разработчик на приложение. Това е извън Oracle (и извън моите познания).