在SQL PLUS中格式化输出查询结果的方法是什么
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,这篇文章主要讲解了"在SQL PLUS中格式化输出查询结果的方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"在SQL PLUS中格式化输出查询
千家信息网最后更新 2025年11月11日在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安全错误
数据库的锁怎样保障安全
简单概括网络安全现状
服务器负载均衡怎么做
怎么找国家统计的数据库
以下属于小型数据库系统的是
无法联系你的组织服务器
linux 服务器发包
数据库闭包是哪的知识点
加工中心数据库在哪里
科技和互联网对艺术的影响
中国网络安全案例分析
LUM数据库考试壁纸
淮安推广网络技术
数据库中 数据列 汇总
财经网络安全知识
戴尔服务器有风险吗
服务器丢包
网络信息是不是就是网络技术
我的世界人间彼岸服务器
拖拽软件开发
大学生树立网络安全意识的重要性
运维用的软件开发
校园网络安全解决方法
兴唐通信网络安全面试
制作服务器防火墙
惠普服务器更换缓存卡电池
网络安全是读什么专业
ec服务器自定义跑酷
教室网络安全知识教育
c 数据库连接可配置
数据库设计 关键技术