SQL dando erro!!!

Oracle

27/10/2006

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????


Rzzanatta

Rzzanatta

Curtidas 0

Respostas

Rosterne

Rosterne

27/10/2006

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.


GOSTEI 0
Motta

Motta

27/10/2006

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.


GOSTEI 0
POSTAR