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

本文详细介绍了如何使用 Oracle 11g 的 x$ksppi 和 x$ksppcv 视图来查询和理解数据库的隐含参数及其值,并对比了 GV$PARAMETER 视图的不同之处。

数据库版本: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+1numb,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 descriptionfromx$ksppipi,

x$ksppsv svwhere

pi.indx =sv.indx

;

查询结果如下:

871515c3929e15ddbd8a3b386e511396.png

由于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 SELECTx.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 ksppihash28 FROMx$ksppi x, x$ksppcv y29 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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值