朋友,
我正在尝试生成动态sql脚本并从原始查询结果中替换字符串。
Original: '/u02/DB/FILE/file01.dbf' or
Original: '+DATA/DB/FILE/file01.dbf'
Required : '/u01/data/dbname/file01.dbf'
我使用下面用dbname替换FILE,但这并没有完全帮助,
不知何故,感觉方法过于复杂,应该有更好/不同的方式。
SELECT 'alter database rename file ''' || f.file_name || ''' to '''|| '/u01' ||
REGEXP_REPLACE(SUBSTR(f.file_name, INSTR(f.file_name, '/',2)), '/FILE/', '/dbname/', 1||''';' stmt
FROM ( SELECT name file_name, bytes
FROM v$tempfile
ORDER BY bytes ESC
)f;
谢谢,非常感谢。
答案 0 :(得分:3)
您可以使用单个正则表达式替换操作:
^([^/]*/[^/]*/)[^/]*/[^/]*
替换为\1data/dbname
。
<强>详情
^
- 匹配字符串的开头([^/]*/[^/]*/)
- 第1组(从替换模式引用\1
反向引用):
[^/]*
- 除/
/
- 斜线[^/]*
- 除/
/
- 斜线[^/]*
- 除/
/
- 斜线[^/]*
- 除/
select regexp_replace('/u02/DB/FILE/file01.dbf', '^([^/]*/[^/]*/)[^/]*/[^/]*', '\1data/dbname') AS RESULT from dual