这篇文章主要讲解了“在SQL PLUS中格式化输出查询结果的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“在SQL PLUS中格式化输出查询结果的方法是什么”吧!

一:过程代码

CreateOrReplaceProcedureFormat_Sql(i_SqlInVarchar2)Isi_CursorIntegerDefaultDbms_Sql.Open_Cursor();Desc_ColsDbms_Sql.Desc_Tab;i_StatusInteger;--执行状态n_ColcntNumber;--列数i_Col_WidthInteger:=3;--列间距,如果觉得太小可以调大一些n_RowcntNumber:=0;--记录结果行数Vc_ColumnnameVarchar2(4000);--列头名字Vc_Col_SplitVarchar2(4000):='---';--记录和列头之间的分割线Vc_ColumnvalueVarchar2(4000);--列值TypeTyp_CollengthIsTableOfNumberIndexByBinary_Integer;Tab_Typ_CollengthTyp_Collength;--存放每一列值的最大长度l_ResultsLong;--输出结果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);ForiIn1..n_ColcntLoopDbms_Sql.Define_Column(i_Cursor,i,Vc_Columnvalue,4000);Tab_Typ_Collength(i):=Length(Desc_Cols(i).Col_Name);EndLoop;i_Status:=Dbms_Sql.Execute(i_Cursor);LoopExitWhenDbms_Sql.Fetch_Rows(i_Cursor)<1;ForiIn1..n_ColcntLoopDbms_Sql.Column_Value(i_Cursor,i,Vc_Columnvalue);IfLength(Vc_Columnvalue)>Tab_Typ_Collength(i)ThenTab_Typ_Collength(i):=Length(Vc_Columnvalue);EndIf;EndLoop;EndLoop;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);ForiIn1..n_ColcntLoopDbms_Sql.Define_Column(i_Cursor,i,Vc_Columnvalue,4000);EndLoop;i_Status:=Dbms_Sql.Execute(i_Cursor);LoopExitWhenDbms_Sql.Fetch_Rows(i_Cursor)<1;n_Rowcnt:=n_Rowcnt+1;l_Results:=l_Results||Rpad(n_Rowcnt,i_Col_Width+3);ForiIn1..n_ColcntLoopDbms_Sql.Column_Value(i_Cursor,i,Vc_Columnvalue);l_Results:=l_Results||Rpad(Vc_Columnvalue||'',Tab_Typ_Collength(i)+i_Col_Width);EndLoop;l_Results:=l_Results||Chr(10);EndLoop;--定义列头Vc_Columnname:=Rpad('NO',i_Col_Width+3,'');ForiIn1..n_ColcntLoopVc_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),'-');EndLoop;Dbms_Sql.Close_Cursor(i_Cursor);--Vc_Columnname:=Vc_Columnname||Chr(10);--输出结果Dbms_Output.Put_Line('TotalRow:'||n_Rowcnt);Dbms_Output.Put_Line(Vc_Columnname);Dbms_Output.Put_Line(Vc_Col_Split);Dbms_Output.Put_Line(l_Results);ExceptionWhenOthersThenDbms_Sql.Close_Cursor(i_Cursor);Raise;End;

二:测试结果

TS@PROD>setserveroutputonsize999999TS@PROD>selectsql_text,sql_id,child_number,hash_valuefromv$sqlWheresql_textLike'select*fromemp%';SQL_TEXT---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------SQL_IDCHILD_NUMBERHASH_VALUE-----------------------------------select*fromempa2dk8bdn0ujx701745700775select*fromempa2dk8bdn0ujx711745700775select*fromempe,deptdwheree.deptno=d.deptno4cs33ya9vumkh02478657104TS@PROD>execFormat_Sql('selectsql_text,sql_id,child_number,hash_valuefromv$sqlWheresql_textLike''select*fromemp%''');TotalRow:3NOSQL_TEXTSQL_IDCHILD_NUMBERHASH_VALUE------------------------------------------------------------------------------------------1select*fromempa2dk8bdn0ujx7017457007752select*fromempa2dk8bdn0ujx7117457007753select*fromempe,deptdwheree.deptno=d.deptno4cs33ya9vumkh02478657104PL/SQLproceduresuccessfullycompleted.

感谢各位的阅读,以上就是“在SQL PLUS中格式化输出查询结果的方法是什么”的内容了,经过本文的学习后,相信大家对在SQL PLUS中格式化输出查询结果的方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!