Jsme pomocí software, který má omezené Oracle schopnosti. Já třeba filtrovat přes CLOB pole tím, že to má konkrétní hodnotu. Normálně, mimo tento software bych udělat něco jako:
DBMS_LOB.SUBSTR(t.new_value) = 'Y'
Nicméně, tato funkce není podporována, takže jsem se snaží využít CAST
místo. Zkoušel jsem mnoho různých pokusů, ale zatím jsou to, co jsem našel:
Software má vestavěný-v dotazu checker/validator a to jsou ty, to se ukazuje jako neplatný:
DBMS_LOB.SUBSTR(t.new_value)
CAST(t.new_value AS VARCHAR2(10))
CAST(t.new_value AS NVARCHAR2(10))
Nicméně, validátor se přijmout tyto:
CAST(t.new_value AS VARCHAR(10))
CAST(t.new_value AS NVARCHAR(10))
CAST(t.new_value AS CHAR(10))
Bohužel, i když validátor umožňuje tyhle projít, při spuštění dotazu k načtení dat, jsem si ORA-22835: Buffer too small
při použití VARCHAR
nebo NVARCHAR
. A já si ORA-25137: Data value out of range
při použití CHAR
.
Existují jiné způsoby, jak bych mohl zkusit zkontrolovat, že moje CLOB pole má určitou hodnotu při filtrování dat? Pokud ne, jak mohu opravit můj aktuální problémy?
DBMS_LOB.SUBSTR()
takže nemůžu použít. Myslel jsem, žeCAST
je schopen snížit řetězec, protože jsme také museli použít řešení proTRUNC
:CAST(CAST(date_field AS VARCHAR(9)) AS DATE)
a to funguje. To zbaví době část. Doufal jsem, že bychom mohli udělat něco podobného pro tento jeden.