千家信息网

怎么查看oralce隐含参数并在SQLPLUS窗口格式化输出

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章主要介绍"怎么查看oralce隐含参数并在SQLPLUS窗口格式化输出",在日常操作中,相信很多人在怎么查看oralce隐含参数并在SQLPLUS窗口格式化输出问题上存在疑惑,小编查阅了各式资
千家信息网最后更新 2025年01月20日怎么查看oralce隐含参数并在SQLPLUS窗口格式化输出

这篇文章主要介绍"怎么查看oralce隐含参数并在SQLPLUS窗口格式化输出",在日常操作中,相信很多人在怎么查看oralce隐含参数并在SQLPLUS窗口格式化输出问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么查看oralce隐含参数并在SQLPLUS窗口格式化输出"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

/** 功能:用于在10g,11g中查询隐含参数的值,主要是可以在SQLPLUS窗口格式化输出       注意Cn_Batch_Length的值设置的没必要太大 作者:stotf 时间:2020/3/28**/Create Or Replace Function f_Imp_Param(Name In Varchar2) Return Varchar2 Is  Vc_Term   Varchar2(100); --用于参数替换  Vc_Result Long; --返回查询结果  Vc_Sql    Varchar2(4000); --定义sql  Cur_Kk    Sys_Refcursor; --参考游标  Cn_Batch_Length Constant Pls_Integer := 300; --定义最多查询行数  v_Num Number := 0; --行号  --定义列头  Vc_Parameter             Varchar2(100) := 'PARAMETER';  Vc_Session_Value         Varchar2(100) := 'SESSION_VALUE';  Vc_Instance_Value        Varchar2(100) := 'INSTANCE_VALUE';  Vc_Is_Session_Modifiable Varchar2(100) := 'IS_SESSION_MODIFIABLE';  Vc_Is_System_Modifiable  Varchar2(100) := 'IS_SYSTEM_MODIFIABLE';  --用于记录列的最大实际长度  Type Length_Col Is Record(    Para        Number := Length(Vc_Parameter),    Sess        Number := Length(Vc_Session_Value),    Inst        Number := Length(Vc_Instance_Value),    Is_Sess_Mod Number := Length(Vc_Is_Session_Modifiable),    Is_Sys_Mod  Number := Length(Vc_Is_System_Modifiable));  Rec_Length Length_Col;  --定义和查询列匹配的record  Type Rec_Result Is Record(    Parameter             X$ksppi.Ksppinm%Type,    Session_Value         X$ksppcv.Ksppstvl%Type,    Instance_Value        X$ksppsv.Ksppstvl%Type,    Is_Session_Modifiable Varchar2(10),    Is_System_Modifiable  Varchar2(10));  --定义存放结果的table  Type Tab_Result Is Table Of Rec_Result;  Typ_Tab Tab_Result;Begin  --处理参数,如果开头没有加下划线,则加上  If Substr(Name, 1, 1) = '_' Then    Vc_Term := '/' || Lower(Name);  Else    Vc_Term := '/_' || Lower(Name);  End If;  Vc_Sql := 'Select a.Ksppinm "Parameter",         b.Ksppstvl "Session Value",         c.Ksppstvl "Instance Value",         Decode(Bitand(a.Ksppiflg / 256, 1), 1, ''TRUE'', ''FALSE'') Is_Session_Modifiable,         Decode(Bitand(a.Ksppiflg / 65536, 3),                1,                ''IMMEDIATE'',                2,                ''Deferred'',                3,                ''IMMEDIATE'',                ''FALSE'') Is_System_Modifiable    From X$ksppi a, X$ksppcv b, X$ksppsv c   Where a.Indx = b.Indx     And a.Indx = c.Indx     And a.Ksppinm Like :name Escape ''/''';  Open Cur_Kk For Vc_Sql    Using Vc_Term || '%';  --循环结果,找出每一列实际值的最大长度  Fetch Cur_Kk Bulk Collect    Into Typ_Tab Limit Cn_Batch_Length;  For i In 1 .. Typ_Tab.Count Loop    If Length(Typ_Tab(i).Parameter) > Rec_Length.Para Then      Rec_Length.Para := Length(Typ_Tab(i).Parameter);    End If;    If Length(Typ_Tab(i).Session_Value) > Rec_Length.Sess Then      Rec_Length.Sess := Length(Typ_Tab(i).Session_Value);    End If;    If Length(Typ_Tab(i).Instance_Value) > Rec_Length.Inst Then      Rec_Length.Inst := Length(Typ_Tab(i).Instance_Value);    End If;    If Length(Typ_Tab(i).Is_Session_Modifiable) > Rec_Length.Is_Sess_Mod Then      Rec_Length.Is_Sess_Mod := Length(Typ_Tab(i).Is_Session_Modifiable);    End If;    If Length(Typ_Tab(i).Is_System_Modifiable) > Rec_Length.Is_Sys_Mod Then      Rec_Length.Is_Sys_Mod := Length(Typ_Tab(i).Is_System_Modifiable);    End If;  End Loop;  Close Cur_Kk;  Dbms_Output.Put_Line('总记录数:' || Typ_Tab.Count);  --输出列头  Vc_Result := 'NO    ' || Rpad(Vc_Parameter, Rec_Length.Para + 2, ' ') ||               Rpad(Vc_Session_Value, Rec_Length.Sess + 2, ' ') ||               Rpad(Vc_Instance_Value, Rec_Length.Inst + 2, ' ') ||               Rpad(Vc_Is_Session_Modifiable,                    Rec_Length.Is_Sess_Mod + 2,                    ' ') || Rpad(Vc_Is_System_Modifiable,                                 Rec_Length.Is_Sys_Mod + 2,                                 ' ' || Chr(10));  --输出记录  For i In 1 .. Typ_Tab.Count Loop    v_Num := v_Num + 1;    --字符后连接一个空格的字符,防止null值对长度计算的影响    Vc_Result := Vc_Result || Rpad(To_Char(v_Num), 6, ' ') ||                 Rpad(Typ_Tab(i).Parameter || ' ', Rec_Length.Para + 2, ' ') ||                 Rpad(Typ_Tab(i).Session_Value || ' ',                      Rec_Length.Sess + 2,                      ' ') || Rpad(Typ_Tab(i).Instance_Value || ' ',                                   Rec_Length.Inst + 2,                                   ' ') ||                 Rpad(Typ_Tab(i).Is_Session_Modifiable || ' ',                      Rec_Length.Is_Sess_Mod + 2,                      ' ') || Rpad(Typ_Tab(i).Is_System_Modifiable || ' ',                                   Rec_Length.Is_Sys_Mod + 2,                                   ' ') || Chr(10);  End Loop;  Dbms_Output.Put_Line(Vc_Result);  Return '总记录数:' || v_Num;Exception  When Others Then    Return 'ERROR: ' || Sqlcode || Sqlerrm;End;

到此,关于"怎么查看oralce隐含参数并在SQLPLUS窗口格式化输出"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0