大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要介绍“怎么查看oralce隐含参数并在SQLPLUS窗口格式化输出”,在日常操作中,相信很多人在怎么查看oralce隐含参数并在SQLPLUS窗口格式化输出问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么查看oralce隐含参数并在SQLPLUS窗口格式化输出”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
天台网站建设公司创新互联,天台网站设计制作,有大型网站制作公司丰富经验。已为天台上1000+提供企业网站建设服务。企业网站搭建\成都外贸网站建设公司要多少钱,请找那个售后服务好的天台做网站的公司定做!
/** 功能:用于在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窗口格式化输出”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!