Мы используем программное обеспечение с ограниченными возможностями Oracle. Мне нужно отфильтровать поле CLOB, убедившись, что оно имеет определенное значение. Обычно, вне этого программного обеспечения, я бы сделал что-то вроде:
DBMS_LOB.SUBSTR(t.new_value) = 'Y'
Однако это не поддерживается, поэтому я пытаюсь использовать CAST
вместо. Я пробовал много разных попыток, но до сих пор это то, что я нашел:
Программное обеспечение имеет встроенную проверку/валидатор запросов, и это те, которые оно показывает как недействительные:
DBMS_LOB.SUBSTR(t.new_value)
CAST(t.new_value AS VARCHAR2(10))
CAST(t.new_value AS NVARCHAR2(10))
Однако валидатор принимает эти:
CAST(t.new_value AS VARCHAR(10))
CAST(t.new_value AS NVARCHAR(10))
CAST(t.new_value AS CHAR(10))
К сожалению, даже несмотря на то, что валидатор пропускает эти данные, при выполнении запроса для извлечения данных я получаю ORA-22835: Buffer too small
при использовании VARCHAR
или NVARCHAR
. И я получаю ORA-25137: Data value out of range
при использовании CHAR
.
Есть ли другие способы, которыми я мог бы попытаться проверить, что мое поле CLOB имеет определенное значение при фильтрации данных? Если нет, то как мне исправить мои текущие проблемы?
DBMS_LOB.SUBSTR()
так что я не могу этим воспользоваться. Я думалCAST
способен обрезать строку, потому что нам также пришлось использовать обходной путь дляTRUNC
:CAST(CAST(date_field AS VARCHAR(9)) AS DATE)
и это работает. Это избавляет от части времени. Я надеялся, что мы сможем сделать что-то подобное для этого.