您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么查看oralce隱含參數(shù)并在SQLPLUS窗口格式化輸出”,在日常操作中,相信很多人在怎么查看oralce隱含參數(shù)并在SQLPLUS窗口格式化輸出問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么查看oralce隱含參數(shù)并在SQLPLUS窗口格式化輸出”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
/** 功能:用于在10g,11g中查詢隱含參數(shù)的值,主要是可以在SQLPLUS窗口格式化輸出 注意Cn_Batch_Length的值設(shè)置的沒必要太大 作者:stotf 時(shí)間:2020/3/28 **/ Create Or Replace Function f_Imp_Param(Name In Varchar2) Return Varchar2 Is Vc_Term Varchar2(100); --用于參數(shù)替換 Vc_Result Long; --返回查詢結(jié)果 Vc_Sql Varchar2(4000); --定義sql Cur_Kk Sys_Refcursor; --參考游標(biāo) Cn_Batch_Length Constant Pls_Integer := 300; --定義最多查詢行數(shù) v_Num Number := 0; --行號(hào) --定義列頭 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'; --用于記錄列的最大實(shí)際長度 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)); --定義存放結(jié)果的table Type Tab_Result Is Table Of Rec_Result; Typ_Tab Tab_Result; Begin --處理參數(shù),如果開頭沒有加下劃線,則加上 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 || '%'; --循環(huán)結(jié)果,找出每一列實(shí)際值的最大長度 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('總記錄數(shù):' || 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; --字符后連接一個(gè)空格的字符,防止null值對長度計(jì)算的影響 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 '總記錄數(shù):' || v_Num; Exception When Others Then Return 'ERROR: ' || Sqlcode || Sqlerrm; End;
到此,關(guān)于“怎么查看oralce隱含參數(shù)并在SQLPLUS窗口格式化輸出”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。