Estamos usando um software que tem limitado o Oracle capacidades. Eu preciso de filtro através de um campo CLOB, certificando-se de que tem um valor específico. Normalmente, fora deste software gostaria de fazer algo como:
DBMS_LOB.SUBSTR(t.new_value) = 'Y'
No entanto, esta não é suportado por isso que eu estou tentando usar CAST
em vez disso. Eu tentei muitas tentativas diferentes, mas até agora essas são as que eu encontrei:
O software que tem um built-in consulta verificador/validador e estes são os que ele mostra como inválido:
DBMS_LOB.SUBSTR(t.new_value)
CAST(t.new_value AS VARCHAR2(10))
CAST(t.new_value AS NVARCHAR2(10))
No entanto, o avaliador não aceitar estes:
CAST(t.new_value AS VARCHAR(10))
CAST(t.new_value AS NVARCHAR(10))
CAST(t.new_value AS CHAR(10))
Infelizmente, mesmo que o validador permite que essas pessoas passam, quando executar a consulta para obtenção de dados, recebo ORA-22835: Buffer too small
quando utilizar VARCHAR
ou NVARCHAR
. E eu fico ORA-25137: Data value out of range
quando utilizar CHAR
.
Há outras maneiras que eu poderia tentar para verificar se a minha CLOB campo tem um valor específico quando a filtragem de dados? Se não, como faço para corrigir meu questões atuais?
DBMS_LOB.SUBSTR()
então eu não posso usar isso. Eu penseiCAST
é capaz de cortar a cadeia porque nós também tivemos que usar uma solução alternativa paraTRUNC
:CAST(CAST(date_field AS VARCHAR(9)) AS DATE)
e ele funciona. Ele elimina a parte do tempo. Eu estava esperando que poderia fazer algo semelhante para este.