sql >> データベース >  >> RDS >> Oracle

ORA-01704:stringリテラルが長すぎます'OracleXMLTYPE列タイプにXML文書を挿入するときにエラーが発生しました'

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



    1. SQLトレースと拡張イベントの「オブザーバーオーバーヘッド」の測定

    2. MySQL:ユーザーが存在するかどうかを確認してドロップします

    3. リカバリされたハードディスクからMySQLデータベースフォルダを復元します

    4. データベースの詳細を取得する方法は、opencartのビューです