O cliente possui uma tabela J2AATIVT com milhoes de registros. Essa tabela possui 2 campos como indice J2AIDATI (identificador do registro - campo unico na tabela) e J2AIDCTS (identificador do sistema) alem de varios campos VARCHAR2.
O cliente necessita que seja construida uma procedure que compare os registros dessa mesma tabela, so que a comparacao não utiliza indice, a comparacao precisa ser feita nos campos varchar2 e para piorar utilizando like, segue exemplo:
SELECT ORIGEM.*, DESTINO.*
FROM (SELECT * FROM J2AATIVT A WHERE A.J2AIDCTS = 6) ORIGEM
, (SELECT * FROM J2AATIVT C WHERE C.J2AIDCTS = 1 ) DESTINO
WHERE
(ORIGEM.J2ANUMPL IS NOT NULL AND DESTINO.J2ANUMPL IS NOT NULL) AND (ORIGEM.J2ANUMPL <> ' ' AND DESTINO.J2ANUMPL <> ' ') AND (ORIGEM.J2ANUMPL like '%' || DESTINO.J2ANUMPL || '%' OR DESTINO.J2ANUMPL like '%' || ORIGEM.J2ANUMPL || '%')
OR ((ORIGEM.J2ANUMTI IS NOT NULL AND DESTINO.J2ANUMTI IS NOT NULL) AND (ORIGEM.J2ANUMTI <> ' ' AND DESTINO.J2ANUMTI <> ' ') AND (ORIGEM.J2ANUMTI like '%' || DESTINO.J2ANUMTI || '%' OR DESTINO.J2ANUMTI like '%' || ORIGEM.J2ANUMTI || '%'));
já coloquei isso na query e vi que ficou inviavel, a não ser que exista outro tipo de comparacao mais eficaz que eu desconheca.
Estava pensando em fazer essas comparacoes separadas, guardar na memoria em cursores e depois fazer a comparacao entre todos os sistemas num loop, mas ainda assim acho que ficara muito lento e pesado.
não sei se ficou muito complicado o entendimento, mas caso não entendam algo e so perguntar.
Estou aberto a sugestoes e realmente estou precisando muito de alguma ajuda...
Abs....