Oracle
 sql >> база данни >  >> RDS >> Oracle

ORA-01704:твърде дълъг низов литерал „Грешка при вмъкване на XML документ в тип колона на Oracle XMLTYPE“

Предполагам, че предавате 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 (и извън моите познания).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sql (oracle), за да изберете първите 10 записа, след това следващите 10 и т.н

  2. SQL мониторинг в SQL Developer

  3. Вмъкване на няколко реда в таблица - получаване на грешка ORA-00933:SQL командата не е приключила правилно

  4. Как да пренасоча изхода на DBMS_OUTPUT.PUT_LINE към файл?

  5. Отменете привилегиите в Oracle