欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

x$ksppi与x$ksppcv查询隐藏参数

程序员文章站 2022-09-04 15:48:45
数据库版本: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) > ......

数据库版本: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 
;

      查询结果如下:

      x$ksppi与x$ksppcv查询隐藏参数

 

       由于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。