x$ksppi与x$ksppcv查询隐藏参数
数据库版本:oracle11g 11.0.2.0.4
sql> desc x$ksppi;
name null? type
-------------------- -------- ----------------------------
addr raw(8) ---->内存地址
indx number ---->序号
inst_id number ---->instance number
ksppinm varchar2(80) ---->参数名称
ksppity number ---->参数类型
ksppdesc varchar2(255) ---->参数描述
ksppiflg number ---->标志字段
ksppilrmflg number
ksppihash number
sql> desc x$ksppcv;
name null? type
-------------------- -------- ----------------------------
addr raw(8) ---->内存地址
indx number ---->序号
inst_id number ----->instance number
ksppstvl varchar2(4000) ---->value,参数值
ksppstdvl varchar2(4000)
ksppstdf varchar2(9) ---->缺省值
ksppstvf number ---->标志字段
ksppstcmnt varchar2(255) ---->comment
查看隐含参数及值
select pi.indx+1 numb, pi.ksppinm name, sv.ksppstvl value, pi.ksppity type, sv.ksppstdf is_default, decode(bitand(pi.ksppiflg/256,1), 1,'true', 'false' ) is_session_modifiable, decode(bitand(pi.ksppiflg/65536,3), 1,'immediate', 2,'deferred' , 3,'immediate', 'false' ) is_system_modifiable, decode(bitand(sv.ksppstvf,7), 1,'modified', 4,'system modified', 'false' ) is_modified, decode(bitand(sv.ksppstvf,2), 2,'true', 'false' ) is_adjusted, pi.ksppdesc description from x$ksppi pi, x$ksppsv sv where pi.indx = sv.indx ;
查询结果如下:
由于gv$parameter也是查询参数的,但是他们有什么不同呢。
select view_definition from v$fixed_view_definition where view_name = 'gv$parameter'; ------>通过数据字典查看生成gv$parameter视图的sql语句
1 /* formatted on 2019/1/10 上午 10:00:25 (qp5 v5.326) */ 2 select x.inst_id, 3 x.indx + 1, 4 ksppinm, 5 ksppity, 6 ksppstvl, 7 ksppstdvl, 8 ksppstdf, 9 decode (bitand (ksppiflg / 256, 1), 1, 'true', 'false'), 10 decode (bitand (ksppiflg / 65536, 3), 11 1, 'immediate', 12 2, 'deferred', 13 3, 'immediate', 14 'false'), 15 decode (bitand (ksppiflg, 4), 16 4, 'false', 17 decode (bitand (ksppiflg / 65536, 3), 0, 'false', 'true')), 18 decode (bitand (ksppstvf, 7), 19 1, 'modified', 20 4, 'system_mod', 21 'false'), 22 decode (bitand (ksppstvf, 2), 2, 'true', 'false'), 23 decode (bitand (ksppilrmflg / 64, 1), 1, 'true', 'false'), 24 decode (bitand (ksppilrmflg / 268435456, 1), 1, 'true', 'false'), 25 ksppdesc, 26 ksppstcmnt, 27 ksppihash 28 from x$ksppi x, x$ksppcv y 29 where (x.indx = y.indx) 30 and bitand (ksppiflg, 268435456) = 0 31 and ( (translate (ksppinm, '_', '#') not like '##%') ---->筛选,将以下划线'__'开头的替换成'##'开头,然后排除 32 and ( (translate (ksppinm, '_', '#') not like '#%') ---->筛选,将以下划线'_'开头的替换成'#'开头,然后排除(有点困惑,为什么不直接not like '_%' 排除) 33 or (ksppstdf = 'false') 34 or (bitand (ksppstvf, 5) > 0)))
decode函数比较1个参数时
select id,decode(inparam,'becomparedparam','值1' ,'值2') name from table
如果第一个参数inparam=='becomparedparam',则select得到的name显示为值1,
如果第一个参数inparam!='becomparedparam',则select得到的name显示为值2
decode函数比较多个参数时
select id,decode(inparam,'para1','值1' ,'para2','值2','para3','值3','para4','值4','para5','值5','default') name from table
如果第一个参数inparam=='para1'那么那么select得到的那么显示为值1;
如果第一个参数inparam=='para2'那么那么select得到的那么显示为值2;
如果第一个参数inparam=='para3'那么那么select得到的那么显示为值3;
如果第一个参数inparam=='para4'那么那么select得到的那么显示为值4;
如果第一个参数inparam=='para5'那么那么select得到的那么显示为值5;
都不相等就为'default '
bitand( nexpression1 ,nexpression2 )
将 nexpression1 的每一位同 nexpression2 的相应位进行比较。如果 nexpression1 和 nexpression2 的位都是 1,相应的结果位就是 1;否则相应的结果位是 0 ------->1and1 = 1 , 1and0 = 0 , 0and0 = 0
translate(string,from_str,to_str)
返回将(所有出现的)from_str中的每个字符替换为to_str中的相应字符以后的string。translate 是 replace 所提供的功能的一个超集。如果 from_str 比 to_str 长,那么在 from_str 中而不在 to_str 中的额外字符将从 string 中被删除,
因为它们没有相应的替换字符。to_str 不能为空。oracle 将空字符串解释为 null,并且如果translate 中的任何参数为null,那么结果也是 null。