私の推測では、XMLをリテラルとして挿入ステートメントに渡しています。 OracleのSQLは、リテラルで最大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コードなしで実行し、バインド変数を使用するには、アプリケーション開発者に相談する必要があります。それはオラクルの外にあります(そして私の知識の外にあります)。