2012-12-19 50 views
21

Podczas gdy próbuję ustawić wartość ponad 4000 znaków na polu, które ma typ danych CLOB, to daje mi ten błąd:błąd: ORA-01704: string literal zbyt długo

ORA-01704: string dosłownie zbyt długo.

Wszelkie sugestie, jaki typ danych byłoby zastosowanie dla mnie, czy muszę ustawić wartość dla wielu znaków chociaż moim przypadku zdarza się około 15000 znaków.

Uwaga: Długi ciąg, który próbuję zapisać, jest zakodowany w ANSI.

Odpowiedz

36

Czego używasz do pracy z CLOB?

W każdym razie można zrobić z PL/SQL

DECLARE 
    str varchar2(32767); 
BEGIN 
    str := 'Very-very-...-very-very-very-very-very-very long string value'; 
    update t1 set col1 = str; 
END; 
/

Proof link on SQLFiddle

+0

Dziękuję, ale CI nie popiera tych procedur: http://stackoverflow.com/questions/13946641/error-this-feature-is-not-available-for-the-database-you-are-using # comment19232999_13946641 – hsuk

+0

Myślę, że możesz zawinąć ten kod w procedurze i Codeigniter może go wykonać. Przepraszamy, ale nie mam kodu do sprawdzania. Zajrzyj tutaj [link] (http://stackoverflow.com/a/7930092/1910242) – knagaev

+0

Czy to możliwe, ale czy mogę zdefiniować ten rozmiar varchar2, sprawdź ten link, http://stackoverflow.com/questions/13947222/error -ora-06553-pls-306-zła liczba-lub-typy-argumentów-w-wywołaniu-do-procedury/13947420 # 13947420 – hsuk

14

spróbuj podzielić znaki na wiele kawałków jak kwerendy poniżej i spróbuj:

Insert into table (clob_column) values (to_clob('chunk 1') || to_clob('chunk 2')); 

It pracował dla mnie.

1

Dzieło podzielone na 4000 znaków w zależności od wstawianych znaków. Jeśli wstawiasz znaki specjalne, może się to nie udać. Jedynym bezpiecznym sposobem jest zadeklarowanie zmiennej.