Uma obs : agora que eu vi que vc queria fazer a operação de troca apenas no 
fim de arquivo : isso implica que vc quer substituir não TODOS os "10,10" mas 
apenas a partir do último... Ora, para identificar a ÚLTIMA ocorrência de uma 
string, o RDBMS Oracle tem (sempre teve) o INSTR(string, argumento, -1), okdoc 
?? Então é aplicar o que eu disse APENAS da posição indicada pelo INSTR em 
diante... Exemplo :


SYSTEM@xyz#1:SQL>truncate table t;

Table truncated.

SYSTEM@xyz#1:SQL>insert into T values ('Linha1' || chr(10) || 'Linha2' || 
chr(10) || chr(10) || 'Linha 3' || chr(10)
  2  || chr(10) );

1 row created.

SYSTEM@xyz#1:SQL>commit;

Commit complete.

SYSTEM@xyz#1:SQL>select * from t;

C1
---------------------------------------------------------------------------------------------------------------------------------
Linha1
Linha2

Linha 3

SYSTEM@xyz#1:SQL>select dump(c1) from t;

DUMP(C1)
---------------------------------------------------------------------------------------------------------------------------------
Typ=1 Len=24: 
76,105,110,104,97,49,10,76,105,110,104,97,50,10,10,76,105,110,104,97,32,51,10,10

=> legal ? Quero localizar a última sequência de "linhas em branco", que 
relemebremos são indicadas (no seu caso) por LF+LF :



SYSTEM@xyz#1:SQL>select substr(c1, instr(c1, chr(10)||chr(10), -1) ) from t;

SUBSTR(C1,INSTR(C1,CHR(10)||CHR(10),-1))
---------------------------------------------------------------------------------------------------------------------------------

=> vamos olhar o dump, que talvez fique mais visual :

SYSTEM@xyz#1:SQL>select dump( substr(c1, instr(c1, chr(10)||chr(10), -1) )) 
from t;

DUMP(SUBSTR(C1,INSTR(C1,CHR(10)||CHR(10),-1)))
---------------------------------------------------------------------------------------------------------------------------------
Typ=1 Len=2: 10,10

==> Deu pra ver ?? Aí posso pedir pra exibir do início (posição 1) até o último 
par "10,10"/linha em branco :

SYSTEM@xyz#1:SQL>select substr(c1, 1, instr(c1, chr(10)||chr(10), -1) -1) from 
t;

SUBSTR(C1,1,INSTR(C1,CHR(10)||CHR(10),-1)-1)
---------------------------------------------------------------------------------------------------------------------------------
Linha1
Linha2

Linha 3

=> vendo pelo dump :

SYSTEM@xyz#1:SQL>select dump(substr(c1, 1, instr(c1, chr(10)||chr(10), -1) -1)) 
from t;

DUMP(SUBSTR(C1,1,INSTR(C1,CHR(10)||CHR(10),-1)-1))
---------------------------------------------------------------------------------------------------------------------------------
Typ=1 Len=22: 
76,105,110,104,97,49,10,76,105,110,104,97,50,10,10,76,105,110,104,97,32,51

==> TAÍ, na prática isso ** elimina ** a última linha em branco, vamos fazer o 
UPDATE com isso :

SYSTEM@xyz#1:SQL>update t set c1=substr(c1, 1, instr(c1, chr(10)||chr(10), -1) 
-1);

1 row updated.

SYSTEM@xyz#1:SQL>commit;

Commit complete.

=> resultado , removi a última linha em branco :

SYSTEM@xyz#1:SQL>select * from t;

C1
---------------------------------------------------------------------------------------------------------------------------------
Linha1
Linha2

Linha 3

=> pelo dump dá pra ver melhor :

SYSTEM@xyz#1:SQL>select dump(c1) from t;

DUMP(C1)
---------------------------------------------------------------------------------------------------------------------------------
Typ=1 Len=22: 
76,105,110,104,97,49,10,76,105,110,104,97,50,10,10,76,105,110,104,97,32,51

SYSTEM@xyz#1:SQL>


====> yes ??? COMO eu disse na resposta anterior, SE vc tem múltiplas linhas em 
branco a remover, OU vc executa o UPDATE várias vezes (a cada execuçaõ 
eliminando uma linha em branco), OU vc aninha vários REPLACEs cfrme o link que 
te dei, OU lança mão de REGEXP ou recursos mais sofisticados do tipo... 

 []s

   Chiappa

Responder a