在SQL PLUS中格式化输出查询结果的方法是什么
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章主要讲解了"在SQL PLUS中格式化输出查询结果的方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"在SQL PLUS中格式化输出查询
千家信息网最后更新 2025年01月23日在SQL PLUS中格式化输出查询结果的方法是什么
这篇文章主要讲解了"在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 999999TS@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 empa2dk8bdn0ujx7 0 1745700775select * from empa2dk8bdn0ujx7 1 1745700775select * from emp e,dept d where e.deptno = d.deptno4cs33ya9vumkh 0 2478657104TS@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: 3NO 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中格式化输出查询结果的方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
结果
输出
方法
格式
查询
学习
最大
内容
游标
长度
循环
之间
代码
分割线
名字
就是
思路
情况
文章
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
北京物业网络安全管理
歇羽互联网科技有限公司
国家安全教育日之网络安全
安徽正规软件开发生产厂家
数据库找出相同的数据
梦幻西游2020服务器人数榜
晋宁长期上门回收服务器
交通运输网络安全专业人员考试
ea无法连接服务器 战地一
学生网络安全讲座
小白可以做软件开发吗
我的世界饼干服务器
汕头蓝海网络技术
ibm 联想服务器
软件开发阶段及产出文档
家里如何做个共享服务器
app软件开发制作
vm9500视频管理服务器
华为 网络技术大赛 复赛题
无限网络技术有限公司
区域网络技术数据链
软件开发系统问题处理方案
熹翻译软件开发
美国ip服务器地址
软件开发是需要数学好的吗
杂志购物软件开发
非关系型数据库主要用来做什么
互联网科技mcn创业孵化
智能视频分析服务器
手机怎么实现远程服务器