檢視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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle 檢視隱含引數指令碼Oracle指令碼
- [zt] 如何檢視Oracle 隱含引數Oracle
- oracle隱含引數的檢視與修改Oracle
- 【parameter】oracle的隱含引數的檢視Oracle
- [20170502]11G查詢隱含引數檢視.txt
- v$動態效能檢視和隱含引數
- 檢視oracle隱藏引數Oracle
- 檢視Oracle隱藏引數的SQLOracleSQL
- [20171109]檢視隱含引數指令碼.txt指令碼
- oracle 11g常用隱含引數Oracle
- oracle隱藏引數的檢視和使用Oracle
- Oracle檢視引數Oracle
- Oracle 隱含引數Oracle
- ORACLE隱含引數Oracle
- 在列印視窗,列印檢視View的子檢視結構圖View
- 檢視資料庫中的隱藏引數(指令碼)資料庫指令碼
- 檢視編譯引數編譯
- 編譯引數檢視編譯
- 向檢視輸出變數的三種方式變數
- iPhone 新漏洞,可檢視並傳送iPhone照片(含視訊)iPhone
- 在sqlplus中呼叫in out輸入輸出引數的儲存過程SQL儲存過程
- sqlplus格式化輸出(輸出結果顯示在同一行)SQL
- 如何在Windows下啟動Koa並隱藏視窗Windows
- Oracle 11G 隱含引數“_controlfile_autobackup_delay”Oracle
- oracle獲取隱含引數Oracle
- 隱含引數的查詢
- Oracle的隱含引數(zt)Oracle
- js實現在彈出視窗中重新整理主視窗JS
- JSP中怎樣傳遞引數到彈出視窗?JS
- 在sqlplus下格式化輸出查詢結果集SQL
- Oracle 11g中的_optimizer_null_aware_antijoin隱含引數OracleNull
- 檢視JVM執行時引數JVM
- 檢視JVM預設配置引數JVM
- 【MySQL】檢視MySQL Server引數方法MySqlServer
- Intersection observer檢測元素是否在視窗內Server
- 彈出視窗
- 獲取Oracle隱含引數資訊Oracle
- 獲取oracle的隱含引數Oracle