Wykorzystujemy oprogramowanie niepełnosprawnych Oracle. Muszę filtrować polu CLOB, upewniając się, że ma pewną wartość. Zwykle, poza tym oprogramowania, bym zrobił coś takiego:
DBMS_LOB.SUBSTR(t.new_value) = 'Y'
To jednak nie jest obsługiwany, więc staram się używać CAST
zamiast. Próbowałem wiele różnych prób, ale do tej pory to jest to, co znalazłem:
Oprogramowanie ma wbudowane sprawdzanie/weryfikator wniosków, i to te, które pokazuje, jak nieprawidłowe:
DBMS_LOB.SUBSTR(t.new_value)
CAST(t.new_value AS VARCHAR2(10))
CAST(t.new_value AS NVARCHAR2(10))
Jednak weryfikator bierze te:
CAST(t.new_value AS VARCHAR(10))
CAST(t.new_value AS NVARCHAR(10))
CAST(t.new_value AS CHAR(10))
Niestety, nawet pomimo faktu, że validator pomija te dane, po uruchomieniu kwerendy do pobierania danych otrzymuję ORA-22835: Buffer too small
podczas korzystania z VARCHAR
lub NVARCHAR
. I mam ORA-25137: Data value out of range
podczas korzystania z CHAR
.
Czy istnieją inne sposoby, którymi mógłbym spróbować sprawdzić, że moje pole CLOB ma pewne znaczenie w przypadku filtrowania danych? Jeśli nie, to jak mogę naprawić moje obecne problemy?
DBMS_LOB.SUBSTR()
tak, że nie mogę z tego skorzystać. MyślałemCAST
jest w stanie przyciąć pasek, bo nam też musiałem użyć obejścieTRUNC
:CAST(CAST(date_field AS VARCHAR(9)) AS DATE)
i to działa. Eliminuje to część czasu. Miałem nadzieję, że będziemy mogli zrobić coś podobnego do tego.