Estamos utilizando un software que ha limitado Oracle capacidades. Necesito filtrar a través de un campo CLOB por asegurarse de que tiene un valor específico. Normalmente, fuera de este software me gustaría hacer algo como:
DBMS_LOB.SUBSTR(t.new_value) = 'Y'
Sin embargo, esto no es apoyado, así que estoy tratando de usar CAST
en su lugar. He probado muchos intentos diferentes, pero hasta el momento estos son los que he encontrado:
El software tiene un built-in de consulta corrector/validador y estos son los que se muestra como no válido:
DBMS_LOB.SUBSTR(t.new_value)
CAST(t.new_value AS VARCHAR2(10))
CAST(t.new_value AS NVARCHAR2(10))
Sin embargo, el validador no acepta estos:
CAST(t.new_value AS VARCHAR(10))
CAST(t.new_value AS NVARCHAR(10))
CAST(t.new_value AS CHAR(10))
Desafortunadamente, aunque el validador permite que estos van a través de, cuando se ejecuta la consulta para obtener los datos, me sale ORA-22835: Buffer too small
cuando se utiliza VARCHAR
o NVARCHAR
. Y me da ORA-25137: Data value out of range
cuando se utiliza CHAR
.
Hay otras maneras en las que podría tratar de comprobar que mi CLOB campo tiene un valor específico a la hora de filtrar los datos? Si no, ¿cómo puedo solucionar mis problemas actuales?
DBMS_LOB.SUBSTR()
así que no puedo usar eso. PenséCAST
es capaz de cortar la cadena ya que también tuvimos que utilizar una solución paraTRUNC
:CAST(CAST(date_field AS VARCHAR(9)) AS DATE)
y funciona. Se deshace de la porción de tiempo. Tenía la esperanza de que podríamos hacer algo similar para este.