91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在SQL PLUS中格式化輸出查詢結果的方法是什么

發布時間:2021-11-04 17:48:15 來源:億速云 閱讀:241 作者:iii 欄目:關系型數據庫

這篇文章主要講解了“在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中格式化輸出查詢結果的方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

sql
AI

项城市| 抚州市| 铅山县| 休宁县| 宜春市| 夹江县| 茌平县| 安达市| 柯坪县| 长垣县| 临海市| 台中市| 三门峡市| 江华| 洪湖市| 南和县| 宁陵县| 民和| 定西市| 宿松县| 大英县| 广河县| 梨树县| 胶南市| 合川市| 桃江县| 兖州市| 金川县| 星座| 隆德县| 汨罗市| 陇西县| 阳东县| 遂昌县| 涪陵区| 禄劝| 鄱阳县| 泰安市| 桑日县| 府谷县| 武义县|