您好,登錄后才能下訂單哦!
這篇文章主要講解了“在SQL PLUS中格式化輸出查詢結果的方法是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“在SQL PLUS中格式化輸出查詢結果的方法是什么”吧!
一:過程代碼
Create Or Replace Procedure Format_Sql(i_Sql In Varchar2) Is i_Cursor Integer Default Dbms_Sql.Open_Cursor(); Desc_Cols Dbms_Sql.Desc_Tab; i_Status Integer; --執行狀態 n_Colcnt Number; --列數 i_Col_Width Integer := 3; --列間距,如果覺得太小可以調大一些 n_Rowcnt Number := 0; --記錄結果行數 Vc_Columnname Varchar2(4000); --列頭名字 Vc_Col_Split Varchar2(4000) := '---'; --記錄和列頭之間的分割線 Vc_Columnvalue Varchar2(4000); --列值 Type Typ_Collength Is Table Of Number Index By Binary_Integer; Tab_Typ_Collength Typ_Collength; --存放每一列值的最大長度 l_Results Long; --輸出結果 Begin --第一次循環獲取每列值的最大長度 i_Cursor := Dbms_Sql.Open_Cursor; --打開游標; Dbms_Sql.Parse(i_Cursor, i_Sql, Dbms_Sql.Native); Dbms_Sql.Describe_Columns(i_Cursor, n_Colcnt, Desc_Cols); For i In 1 .. n_Colcnt Loop Dbms_Sql.Define_Column(i_Cursor, i, Vc_Columnvalue, 4000); Tab_Typ_Collength(i) := Length(Desc_Cols(i).Col_Name); End Loop; i_Status := Dbms_Sql.Execute(i_Cursor); Loop Exit When Dbms_Sql.Fetch_Rows(i_Cursor) < 1; For i In 1 .. n_Colcnt Loop Dbms_Sql.Column_Value(i_Cursor, i, Vc_Columnvalue); If Length(Vc_Columnvalue) > Tab_Typ_Collength(i) Then Tab_Typ_Collength(i) := Length(Vc_Columnvalue); End If; End Loop; End Loop; Dbms_Sql.Close_Cursor(i_Cursor); --第二次循環拼接輸出結果 i_Cursor := Dbms_Sql.Open_Cursor; --打開游標; Dbms_Sql.Parse(i_Cursor, i_Sql, Dbms_Sql.Native); Dbms_Sql.Describe_Columns(i_Cursor, n_Colcnt, Desc_Cols); For i In 1 .. n_Colcnt Loop Dbms_Sql.Define_Column(i_Cursor, i, Vc_Columnvalue, 4000); End Loop; i_Status := Dbms_Sql.Execute(i_Cursor); Loop Exit When Dbms_Sql.Fetch_Rows(i_Cursor) < 1; n_Rowcnt := n_Rowcnt + 1; l_Results := l_Results || Rpad(n_Rowcnt, i_Col_Width + 3); For i In 1 .. n_Colcnt Loop Dbms_Sql.Column_Value(i_Cursor, i, Vc_Columnvalue); l_Results := l_Results || Rpad(Vc_Columnvalue || ' ', Tab_Typ_Collength(i) + i_Col_Width); End Loop; l_Results := l_Results || Chr(10); End Loop; --定義列頭 Vc_Columnname := Rpad('NO', i_Col_Width + 3, ' '); For i In 1 .. n_Colcnt Loop Vc_Columnname := Vc_Columnname || Rpad(Desc_Cols(i).Col_Name, Tab_Typ_Collength(i) + i_Col_Width, ' '); Vc_Col_Split := Rpad(Vc_Col_Split, Length(Vc_Col_Split) + i_Col_Width, ' '); Vc_Col_Split := Rpad(Vc_Col_Split, Length(Vc_Col_Split) + Tab_Typ_Collength(i), '-'); End Loop; Dbms_Sql.Close_Cursor(i_Cursor); -- Vc_Columnname := Vc_Columnname || Chr(10); --輸出結果 Dbms_Output.Put_Line('Total Row: ' || n_Rowcnt); Dbms_Output.Put_Line(Vc_Columnname); Dbms_Output.Put_Line(Vc_Col_Split); Dbms_Output.Put_Line(l_Results); Exception When Others Then Dbms_Sql.Close_Cursor(i_Cursor); Raise; End;
二:測試結果
TS@PROD> set serveroutput on size 999999 TS@PROD> select sql_text,sql_id,child_number,hash_value from v$sql Where sql_text Like'select * from emp%'; SQL_TEXT --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SQL_ID CHILD_NUMBER HASH_VALUE ------------- ------------ ---------- select * from emp a2dk8bdn0ujx7 0 1745700775 select * from emp a2dk8bdn0ujx7 1 1745700775 select * from emp e,dept d where e.deptno = d.deptno 4cs33ya9vumkh 0 2478657104 TS@PROD> exec Format_Sql('select sql_text,sql_id,child_number,hash_value from v$sql Where sql_text Like''select * from emp%'''); Total Row: 3 NO SQL_TEXT SQL_ID CHILD_NUMBER HASH_VALUE --- ---------------------------------------------------- ------------- ------------ ---------- 1 select * from emp a2dk8bdn0ujx7 0 1745700775 2 select * from emp a2dk8bdn0ujx7 1 1745700775 3 select * from emp e,dept d where e.deptno = d.deptno 4cs33ya9vumkh 0 2478657104 PL/SQL procedure successfully completed.
感謝各位的閱讀,以上就是“在SQL PLUS中格式化輸出查詢結果的方法是什么”的內容了,經過本文的學習后,相信大家對在SQL PLUS中格式化輸出查詢結果的方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。