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