Wielobajtowe postacie spowodowały wiele bólu.WYBIERZ tyle danych od CLOB do VARCHAR2, jak to możliwe, z wielobajtowymi znakami w danych
Wszelkie sugestie dotyczące tego problemu?
Mam pole CLOB że potęga zawiera pewne znaki wielobajtowe, i muszę wybrać w SQL i konwertować to pole do strun procesie przetwórczym, obecnie używam:
SELECT DBMS_LOB.SUBSTR(description, 4000, 1) FROM table
Ale 4000 w powyższym poleceniu ma długość znaków, a nie bajty. Musiałem więc zmienić na 3000, aby obsłużyć wszystkie wielobajtowe znaki, które mogły wkradnąć się do danych, w przeciwnym razie wystąpi błąd rozmiaru bufora.
Problem dotyczy rekordów, które nie zawierają znaku wielobajtowego, może niepotrzebnie skrócić więcej danych, niż jest to konieczne. (. 4000 jest ograniczenie ciąg możemy/musiała z tym żyć)
Czy istnieje sposób, aby zrobić coś w równowartości:
SELECT DBMS_LOB.SUBSTR(description, 4000bytes, 1) FROM table
ten sposób mogę uzyskać jak najwięcej danych z jak to możliwe.
Uwaga: Nie wolno mi tworzyć tabele tymczasowe/widoki, nie używając PL/SQL, tylko SQL SELECT ...
że nie powinno być „... z SUBSTRB”? (SUBSTRB zamiast SUBSTR) –
Ciekawe: czy wiesz, co się stanie, jeśli pierwsze 3999 znaków ma długość jednej bajtu, a 4000 jest wielobajtową? Czy nie zwróci błędnego znaku na pozycji 4000 (ponieważ interpretuje pierwszy bajt wielobajtowego znaku jako jednobajtowego znaku)? –
Żaden Jeffery nie zadziała, jeśli "opis" zawiera znaki wielobajtowe, najgłębszy DBMS_LOB.SUBSTR już trafił w błąd bufora ciągów zanim dotrze do SUBSTRB. – alchn