Oracle
 sql >> Baza danych >  >> RDS >> Oracle

ORA-01704:literał ciągu za długi „Błąd podczas wstawiania dokumentu XML w kolumnie typu Oracle XMLTYPE”

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ą).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd podczas dodawania trybu gotowości

  2. Przykład Oracle FOR LOOP REVERSE

  3. Tabela przestawna Oracle SQL

  4. Obsługa współbieżnych aktualizacji w trybie hibernacji

  5. ORA-00907 Problem z brakiem prawego nawiasu - wybierz z kolejnością za pomocą zapytania wstawianego wewnątrz