Stiamo usando un software che ha limitato la funzionalità di Oracle. Ho bisogno di filtrare attraverso un campo CLOB, assicurandosi che essa ha un valore specifico. Normalmente, al di fuori di questo software, mi piacerebbe fare qualcosa di simile:
DBMS_LOB.SUBSTR(t.new_value) = 'Y'
Tuttavia, questo non è supportata, quindi sto cercando di utilizzare CAST
invece. Ho provato diversi tentativi, ma finora questi sono che cosa ho trovato:
Il software dispone di un built-in query correttore/validator e questi sono quelli che mostra come non valido:
DBMS_LOB.SUBSTR(t.new_value)
CAST(t.new_value AS VARCHAR2(10))
CAST(t.new_value AS NVARCHAR2(10))
Tuttavia, il validatore non accettare queste:
CAST(t.new_value AS VARCHAR(10))
CAST(t.new_value AS NVARCHAR(10))
CAST(t.new_value AS CHAR(10))
Purtroppo, anche se il validatore consente a questi ultimi di passare attraverso, quando si esegue la query per recuperare i dati, ho ORA-22835: Buffer too small
quando si utilizza VARCHAR
o NVARCHAR
. E ho ORA-25137: Data value out of range
quando si utilizza CHAR
.
Ci sono altri modi potrei provare a controllare che il mio campo CLOB ha un valore specifico quando si filtrano i dati? Se no, come posso risolvere i miei problemi attuali?
DBMS_LOB.SUBSTR()
quindi non posso usare quella. Ho pensatoCAST
è in grado di tagliare la corda, perché abbiamo dovuto utilizzare una soluzione perTRUNC
:CAST(CAST(date_field AS VARCHAR(9)) AS DATE)
e funziona. Elimina la porzione di tempo. Speravo si potesse fare qualcosa di simile per questo.