最近学习《ORACLE编程艺术》时,第三章跟踪文件作者写了一个查询语句,将v$diag_info的 ADR Home的值替换成$home$,上网查询了使用到的with as select、case when、replace等的作用,才看懂了,在此记录一下。 查询语句内容如下:with home as (select value home from v$diag_info where name='ADR Home')select name, case when value <> home.home then replace (value,home.home,'$home$') else value end value from v$diag_info,home; with as select: 该语句会创建一个临时表,用于下面的查询,在这里是创建了一个home表,表中有一行一列,列名为home,值为v$diag_info 视图中name为 ADR Home的行的value值,在我的环境下是 /u01/app/oracle/diag/rdbms/cdb1/CDB1,下面的查询使用home.home(表名.列名)即可访问这个值。 case when else end: 满足case when 后面的条件,得到then后面的值,和编程语言中的switch类似。这里判断v$diag_info视图的行的value值是否是home.home(即 /u01/app/oracle/diag/rdbms/cdb1/CDB1),若不是,则使用replace函数替换,否则,保留值。目的是排除掉 ADR Home 这一行,使它显示 /u01/app/oracle/diag/rdbms/cdb1/CDB1, 而不是 $HOME$。 replace: 替换字符串的函数,分别有3个参数。 replace(str1,str2,str3) str1是原来的字符串,这里就是每行value列的值。 str2是要被替换的字符串,这里是home.home( 即 /u01/app/oracle/diag/rdbms/cdb1/CDB1) str3是要替换成的字符串,这里是 $home$ 就是在str1中查找str2,找到则将str1中的str2替换成str3,找不到则不变。 这里replace就是实现将value列的值包含 /u01/app/oracle/diag/rdbms/cdb1/CDB1 的,将 /u01/app/oracle/diag/rdbms/cdb1/CDB1 替换成 $home$ 综上,整个查询就是匹配 select name,value from v$diag_info 语句结果集中除了 ADR Home 的所有行,若存在 /u01/app/oracle/diag/rdbms/cdb1/CDB1 值,将其替换成 $home$ ,便于阅读理解。 替换前的结果: sys@PDB1> select name,value from v$diag_info; NAME VALUE ------------------------- ---------------------------------------------------------------------- Diag Enabled TRUE ADR Base /u01/app/oracle ADR Home /u01/app/oracle/diag/rdbms/cdb1/CDB1 Diag Trace /u01/app/oracle/diag/rdbms/cdb1/CDB1/trace Diag Alert /u01/app/oracle/diag/rdbms/cdb1/CDB1/alert Diag Incident /u01/app/oracle/diag/rdbms/cdb1/CDB1/incident Diag Cdump /u01/app/oracle/diag/rdbms/cdb1/CDB1/cdump Health Monitor /u01/app/oracle/diag/rdbms/cdb1/CDB1/hm Default Trace File /u01/app/oracle/diag/rdbms/cdb1/CDB1/trace/CDB1_ora_72322.trc Active Problem Count 0 Active Incident Count 0 11 rows selected. 替换后的结果: sys@PDB1> with home as 2 (select value home from v$diag_info where name='ADR Home') 3 select name, 4 case when value <> home.home 5 then replace (value,home.home,'$home$') 6 else value 7 end value 8 from v$diag_info,home; NAME VALUE ------------------------- ---------------------------------------------------------------------- Diag Enabled TRUE ADR Base /u01/app/oracle ADR Home /u01/app/oracle/diag/rdbms/cdb1/CDB1 Diag Trace $home$/trace Diag Alert $home$/alert Diag Incident $home$/incident Diag Cdump $home$/cdump Health Monitor $home$/hm Default Trace File $home$/trace/CDB1_ora_72322.trc Active Problem Count 0 Active Incident Count 0 11 rows selected.
[ORACLE] with as select、case when else end、replace
来源:这里教程网
时间:2026-03-03 16:37:21
作者:
编辑推荐:
- oracle 定时expdp/impdp数据库schema03-03
- [ORACLE] with as select、case when else end、replace03-03
- [20210418]ORA-14767 Cannot specify this interval with existing high bounds.txt03-03
- [20210418]查询v$视图问题.txt03-03
- Oracle 数据库应急宝典(二)_参数文件篇03-03
- 从Oracle 11.2.0.4 BUG到Oracle子查询展开分析03-03
- Oracle学习路线03-03
- [20210418]CBC latch再讨论3.txt03-03
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 从Oracle 11.2.0.4 BUG到Oracle子查询展开分析
从Oracle 11.2.0.4 BUG到Oracle子查询展开分析
26-03-03 - Oracle学习路线
Oracle学习路线
26-03-03 - 设置SSH信任关系
设置SSH信任关系
26-03-03 - 怎样下载小品视频到手机,教你快捷方法,批量下载各种视频
怎样下载小品视频到手机,教你快捷方法,批量下载各种视频
26-03-03 - 一条SQL引起的ORA-04031错误
一条SQL引起的ORA-04031错误
26-03-03 - 自媒体技巧之一,一键批量获取无水印的西瓜、抖音短视频
自媒体技巧之一,一键批量获取无水印的西瓜、抖音短视频
26-03-03 - 【RAC】操作系统重装后RAC11g节点重置注意事项
【RAC】操作系统重装后RAC11g节点重置注意事项
26-03-03 - OGG源端同目标端某个字段数值相差10000倍
OGG源端同目标端某个字段数值相差10000倍
26-03-03 - MySQL索引结构为什么是B+树
MySQL索引结构为什么是B+树
26-03-03 - 如何有效的为ASM磁盘组剔除磁盘添加磁盘
如何有效的为ASM磁盘组剔除磁盘添加磁盘
26-03-03
