檢視oralce10g,11g隱含引數,並在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;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31557103/viewspace-2683167/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- v$parameter gv$parameter 檢視 DDL 與隱含引數
- Oracle 11G 隱含引數“_controlfile_autobackup_delay”Oracle
- 帶引數的檢視
- iPhone 新漏洞,可檢視並傳送iPhone照片(含視訊)iPhone
- 如何在Windows下啟動Koa並隱藏視窗Windows
- Intersection observer檢測元素是否在視窗內Server
- 檢視JVM執行時引數JVM
- 檢視JVM預設配置引數JVM
- 彈出視窗
- 2.7.11 檢視引數設定的方法
- [20190417]隱含引數_SPIN_COUNT.txt
- 常用指令碼:獲取隱含引數指令碼
- win10怎樣檢視電腦配置引數_win10電腦配置引數檢視教程Win10
- 彈出視窗messagebox
- Prism 彈出視窗
- 透過 v$parameter 檢視看引數修改級別(11g, 18c, 19c)
- 如何檢視docker run啟動引數命令Docker
- [20190401]隱含引數_mutex_spin_count.txtMutex
- Oracle direct path read相關隱含引數Oracle
- 檢視JVM預設引數及微調JVM啟動引數JVM
- oracle 11g檢視alert日誌方法Oracle
- 格式化輸出變數工具變數
- Linux 檢視埠占用並Linux
- 如何在MonogoDB中檢視配置的引數值MonoGo
- linux 檢視日誌的命令引數有哪些?Linux
- note1 : ubuntn 系統引數檢視命令
- [20190524]sqlplus 與輸出&.txtSQL
- Web實時日誌輸出檢視管理系統Web
- JavaScript檢測window.open()彈出視窗是否被攔截JavaScript
- 從底部彈出Dialog視窗
- fastadmin 彈出視窗的功能AST
- Mac檢視隱藏的檔案Mac
- 使用檢視格式化來自定義SharePoint
- 輸入密碼檢視flag密碼
- CentOS下檢視nginx和php的編譯引數CentOSNginxPHP編譯
- Visual Studio Release版本開啟debug視窗進行除錯輸出。除錯
- Qt之彈出介面顯示在父視窗中間QT
- [20191206]隱含引數_db_always_check_system_ts.txt