poniedziałek, 24 września 2007

Ach, te polskie krzaczki...

Nieprzyjemna sprawa - nie udało mi się za pomocą skryptu Ruby wrzucić do bazy Oracle danych do kolumny typu CLOB. Nieprzyjemna dlatego, że nie spodziewałem się takich kłopotów. A "nie udało mi się" uzyskać poprawnych "polskich znaczków" korzystając z Ruby-OCI8.

Wszystko było OK, dopóki operacje były przeprowadzane na kolumnach VARCHAR. Było dobrze również wtedy, gdy wrzuciłem kawałek tekstu do kolumny CLOB. W końcu jednak doszedłem do momentu, gdy do kolumny CLOB trzeba było wrzucić Naprawdę Duży Blok Tekstu. I Oracle stwierdził wtedy, że OCIError: ORA-01704. Inaczej mówiąc, Oracle wymaga dla siebie obsługi CLOB tak samo jak BLOB, czyli w Tak-Pokręcony-Jak-Tylko-Oracle-Potrafi-Sposób, z użyciem specjalnych poleceń zapisu i odczytu (najpierw "select ... for update" a potem "... . write"). Taki sposób jest wspierany przez Ruby-OCI, jednak z niewiadomych dla mnie powodów masakrowane są wtedy wszystkie nasze swojskie ogonki i kreski.

Problem w końcu obszedłem, pisząc programik w Javie. Tam cała obsługa CLOB w Oracle jest zupełnie przezroczysta, a martwi się o nią sterownik JDBC. Szkoda jednak, że odpowiadający mu sterownik dla Ruby ma jeszcze takie braki. Ciekawi mnie też, jak sprawa wyglądała by w PHP czy Pythonie. Może ktoś z czytelników tego bloga może podzielić się doświadczeniami?