Fórum SQL dando erro!!! #28638
27/10/2006
0
Olá galera.. tô fazendo uma busca no campo ´historico´ que é do tipo long mas ele dá erro:
SELECT * FROM TABELA WHERE historico LIKE ´¬REDE¬´
o erro é esse:
ORA-00932: inconsistent datatypes: expected NUMBER got LONG
como trato essa consulta????
SELECT * FROM TABELA WHERE historico LIKE ´¬REDE¬´
o erro é esse:
ORA-00932: inconsistent datatypes: expected NUMBER got LONG
como trato essa consulta????
Rzzanatta
Curtir tópico
+ 0
Responder
Posts
30/10/2006
Rosterne
rzzanatta,
existem algumas restrições para campos LONG e LONG RAW.
- Não se pode criar um object type com o atributo de LONG.
- Uma coluna LONG não pode está dentro da cláusula WHERE ou com referência integral dos dados, exceto NULL or NOT NULL.
- Uma função não pode retornar um campo LONG.
- Uma tabela poderá ter somente um campo LONG.
- LONG não pode ser indexada.
- LONG não pode usar cláusulas além do WHERE já mencionado, GROUP BY, ORDER BY e CONNECT BY.
Duas dicas pra que você consiga realizar a query. Crie uma tabela temporária com os campos da tabela original, mas alterando um tipo LONG para CLOB.
A outra dica é para vc alterar diretamente na tabela o campo LONG para CLOB, caso não tenha problema de alterar a estrutura da tabela original.
Ex1:
- create global temporary table lt (d clob) on commit preserve rows;
- insert into lt select to_lob(d) from l;
Ex2:
- alter table tabela modify (historico CLOB);
Espero ter ajudado.
existem algumas restrições para campos LONG e LONG RAW.
- Não se pode criar um object type com o atributo de LONG.
- Uma coluna LONG não pode está dentro da cláusula WHERE ou com referência integral dos dados, exceto NULL or NOT NULL.
- Uma função não pode retornar um campo LONG.
- Uma tabela poderá ter somente um campo LONG.
- LONG não pode ser indexada.
- LONG não pode usar cláusulas além do WHERE já mencionado, GROUP BY, ORDER BY e CONNECT BY.
Duas dicas pra que você consiga realizar a query. Crie uma tabela temporária com os campos da tabela original, mas alterando um tipo LONG para CLOB.
A outra dica é para vc alterar diretamente na tabela o campo LONG para CLOB, caso não tenha problema de alterar a estrutura da tabela original.
Ex1:
- create global temporary table lt (d clob) on commit preserve rows;
- insert into lt select to_lob(d) from l;
Ex2:
- alter table tabela modify (historico CLOB);
Espero ter ajudado.
Responder
Gostei + 0
30/10/2006
Motta
expected NUMBER got LONG
Não entendi a msg de erro , não deveria ser esta, eu uso um bloco assim para achar uma string em LONG.
Quero localizar a string @ ...
DECLARE VS_BODY LONG; BEGIN FOR R IN (SELECT * FROM USER_TRIGGERS) LOOP VS_BODY := R.TRIGGER_BODY; IF VS_BODY LIKE ´¬@¬´ THEN DBMS_OUTPUT.PUT_LINE(´TRIGGER ´ || R.TRIGGER_NAME); END IF; END LOOP; -- FOR S IN (SELECT * FROM USER_VIEWS) LOOP VS_BODY := S.TEXT; IF VS_BODY LIKE ´¬@¬´ THEN DBMS_OUTPUT.PUT_LINE(´VIEW ´ || S.VIEW_NAME); END IF; END LOOP; END;
na versão 9i vc não precisa deste tratamento pois a triggers
estão na USER_SOURCE mas o exemplo vale.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)