[20251010]建立完善tpt的prr.sql脚本.txt

news/2025/10/10 20:47:47/文章来源:https://www.cnblogs.com/lfree/p/19133838
[20251010]建立完善tpt的prr.sql脚本.txt

--//昨天在测试时不小心输入pr命令时多输入一个r,没想到居然执行了,说明在本目录或者SQLPATH环境目录下存在prr.sql脚本。
--//当时忙着处理其他事情,先把这件事情放一放,今天上班优先做一个探究。

1.环境:
SCOTT@book01p> @ ver2
==============================
PORT_STRING                   : x86_64/Linux 2.4.xx
VERSION                       : 21.0.0.0.0
BANNER                        : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
BANNER_FULL                   : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
BANNER_LEGACY                 : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
CON_ID                        : 0
PL/SQL procedure successfully completed.

$ echo $SQLPATH
/home/oracle/sqllaji:/home/oracle/sqllaji/tpt

$ locate prr.sql
/home/oracle/sqllaji/tpt-oracle-master/prr.sql
/home/oracle/sqllaji/tpt-oracle-master.20250702/prr.sql

--//很明显确实存在1个prr.sql脚本。仔细查看prr.sql脚本发现存在如下内容:
regexp_like(lower(l_descTbl(i).col_name), lower('&1'))

--//也就是可以根据参数1,输入正则表达式显示仅仅显示需要的字段。不过我估计作者也很少使用,存在一些小问题,根据pr.sql脚本
--//做一些改动.

2.改动后脚本如下:
$ cat -v tpt/pr.sql
.
-- Notes:   This script is based on Tom Kyte's original printtbl code ( http://asktom.oracle.com )
--          For coding simplicity (read: lazyness) I'm using custom quotation marks ( q'\ ) so
--          this script works only from Oracle 10gR2 onwards

def _pr_tmpfile=&_tpt_tempdir/pr_&_tpt_tempfile..tmp
def _set_tmpfile=&_tpt_tempdir/set_&_tpt_tempfile..sql

@@saveset
set serverout on size 1000000 termout off
save &_pr_tmpfile replace
set termout on

0 c clob := q'^F
0 declare

999999      ^F';;
999999      l_theCursor     integer default dbms_sql.open_cursor;;
999999      l_columnValue   varchar2(4000);;
999999      l_status        integer;;
999999      l_descTbl       dbms_sql.desc_tab;;
999999      l_colCnt        number;;
999999  begin
999999      dbms_sql.parse(  l_theCursor, c, dbms_sql.native );;
999999      dbms_sql.describe_columns( l_theCursor, l_colCnt, l_descTbl );;
999999      for i in 1 .. l_colCnt loop
999999          dbms_sql.define_column( l_theCursor, i,
999999                                  l_columnValue, 4000 );;
999999      end loop;;
999999      l_status := dbms_sql.execute(l_theCursor);;
999999      while ( dbms_sql.fetch_rows(l_theCursor) > 0 ) loop
999999          dbms_output.put_line( '==============================' );;
999999          for i in 1 .. l_colCnt loop
999999                  dbms_sql.column_value( l_theCursor, i,
999999                                         l_columnValue );;
999999                  dbms_output.put_line
999999                      ( rpad( l_descTbl(i).col_name,
999999                        30 ) || ': ' || l_columnValue );;
999999          end loop;;
999999      end loop;;
999999  exception
999999      when others then
999999          dbms_output.put_line(dbms_utility.format_error_backtrace);;
999999          raise;;
999999 end;;
/

set serverout off term on
@@loadset

get &_pr_tmpfile nolist
host &_delete &_pr_tmpfile &_set_tmpfile

--//注:里面的^F在linux下的插入模式按ctrl+v,ctrl+f输入,这样SQL语句里基本不存在^F字符,不会遇到冲突的可能。
--//另外注意脚本开始的. 不是多余的字符。

3.测试:
SCOTT@book01p> select * from emp where sal>3400;
     EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
      7839 KING       PRESIDENT            1981-11-17 00:00:00       5000                    10

--//@ prr * 相当于执行@ pr ,结果我不贴出了。

SCOTT@book01p> @ prr e
==============================
EMPNO                         : 7839
ENAME                         : KING
HIREDATE                      : 1981-11-17 00:00:00
DEPTNO                        : 10
PL/SQL procedure successfully completed.
--//输入E表示输出仅仅含有e字符的字段。

SCOTT@book01p> @ prr ^e
==============================
EMPNO                         : 7839
ENAME                         : KING
PL/SQL procedure successfully completed.
--//输入E开头的字段。

SCOTT@book01p> @ prr deptno|ename|empno
==============================
EMPNO                         : 7839
ENAME                         : KING
DEPTNO                        : 10
PL/SQL procedure successfully completed.
--//输入deptno|ename|empno,表示输出deptno,ename,empno三个字段。

SCOTT@book01p> @ prr [^HIREdate|mgr]
==============================
EMPNO                         : 7839
ENAME                         : KING
JOB                           : PRESIDENT
SAL                           : 5000
COMM                          :
DEPTNO                        : 10
PL/SQL procedure successfully completed.
--//表示输出除HIREdate,mgr外其他字段。

SCOTT@book01p> @ prr e$
==============================
ENAME                         : KING
HIREDATE                      : 1981-11-17 00:00:00
PL/SQL procedure successfully completed.
--//表示输出e结尾的字段。

--//还可以像pr.sql那样调用prr.sql,例子如下:
SCOTT@book01p> select * from emp where sal>3400
  2  @ prr deptno|ename|empno
==============================
EMPNO                         : 7839
ENAME                         : KING
DEPTNO                        : 10
PL/SQL procedure successfully completed.

SCOTT@book01p> select * from v$database
  2  @ prr supp|^dbid
==============================
DBID                          : 1617337831
SUPPLEMENTAL_LOG_DATA_MIN     : YES
SUPPLEMENTAL_LOG_DATA_PK      : NO
SUPPLEMENTAL_LOG_DATA_UI      : NO
SUPPLEMENTAL_LOG_DATA_FK      : NO
SUPPLEMENTAL_LOG_DATA_ALL     : NO
SUPPLEMENTAL_LOG_DATA_PL      : NO
SUPPLEMENTAL_LOG_DATA_SR      : NO
PL/SQL procedure successfully completed.

--//注:该脚本还调用saveset.sql,loadset.sql脚本,如果你不想安装tpt的整个脚本集合。可以自己做一点点改动就可以实现相似的
--//功能。
--//注解saveset,loadset,自己定义_pr_tmpfile,_set_tmpfile,_delete满足需求就可以了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/934395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十一篇

今天是10月10号,今天只上了一节英语课,学习了新的单词,颇有收获。

[Flutter] Flutter APK构建签名并推广到Github workflow

[Flutter] Flutter APK构建签名并推广到Github workflowFlutter APK构建签名并推广到Github workflow 最近在开发flutter软件的时候发现构建出来的apk在手机上不能直接覆盖更新,会提示签名不一致,但由于我的软件是在…

Windows 电脑安装 XTerminal 1.25.1 x64 版(带安装包下载关键词)​

Windows 电脑安装 XTerminal 1.25.1 x64 版(带安装包下载关键词)​​XTerminal​ 是一款运行在 Windows 系统上的终端工具(类似命令行窗口),通常用于开发者、运维人员或高级用户来执行命令、连接远程服务器、运行…

YOLOv11的神经辐射场(NeRF)辅助训练-(通过合成视角增强内容多样性)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

题解:AT_arc138_f [ARC138F] KD Tree

题意:平面上有 \(n\) 个点 \((i,p_i)\),\(p\) 是一个排列。每次操作可以选择 \(x/y\) 和一个坐标,将点列分成左右/上下两边(保持两边的相对顺序不变),分别递归下去,直到只剩下一个点,把它加入答案序列末尾。求…

SP33 TRIP - Trip 个人题解

题目链接 题目大意: 给出两个字符串,要求求出所有 LCS (最长公共子序列问题)的具体方案,并按字典序输出 解题方法: 首先我们要清楚求 LCS 的长度的方法,按照闫氏DP分析法我们得到一下过程:但是我们如果直接在此…

经营不是老板一个人的事 - 智慧园区

很多企业都陷入了“高层定目标,中层传口号,基层盲执行”的怪圈。一提到“经营”,大家就会想到董事长、总经理,觉得那是高层的事。但真相是:如果经营思维只停留在高层,企业正在走向危险边缘。一、经营到底是什么?…

Codeforces Round 1051 (Div. 2)[A ~E]

―僕は其れに縋る事さえ/出来無かった訳ですから目录Codeforces Round 1051 (Div. 2)A. All Lengths SubtractionB. DiscountsC. Max TreeD. Inversion Graph Coloring Easy Version/Hard VersionE. Make Good Codefo…

如何在 Spring Boot 应用中配置多个 Spring AI 的 LLM 客户端

1. 概述 越来越多的现代应用开始集成大型语言模型(LLM),以构建更智能的功能。如何使用Spring AI快速整合LLM能力到自己的Spring Boot应用,在之前的博文中有过很多篇关于使用Spring AI使用不同供应商LLM的整合案例。…

【Azure APIM】解答REST API实现禁用自签名证书的证书链验证中的backends参数值从那里取值的问题?

问题描述 使用APIM服务时候,因为后端的API需要使用自签名证书进行验证。如果通过浏览器直接访问后端API返回正常,但是APIM请求的时候返回为500报错。 在开启Trace后,发现报错信息为:error message :The underlyin…

2025 AI 进化图谱:技术突破、场景落地与产业重构 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

题解:P14065 [PO Final 2022] 对弈 / Laserschack

题目传送门 先警示后人: 我在看题目的时候看成了 \(1 \le r,c \le 4000\) 然后被迫想了一个 \(\operatorname{O}(\operatorname{RC} \ \operatorname{log} \ \operatorname{RC})\) 发现好像有点玄 最后乱加一堆优化跑…

[Git] 放弃暂存区的修改

1 需求描述在使用 Git 进行版本控制时,有时我们会在暂存区(staging area)中暂存了一些修改,但后来发现这些修改是不需要的,想要放弃这些修改并恢复到上一次提交的状态。Git 提供了几种方法来实现这一操作。2 解决…

前端里面transform和transition 属性的区别

transform 和 transition 都是用于在 HTML 中控制元素的视觉效果和动画的 CSS 属性,但它们的作用和功能不同。下面详细解释这两个属性的区别: 1. transform 属性 transform 属性允许你对元素进行 2D 或 3D 转换(即对…

【MAC环境】安装多个 JDK - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

CF2064E Mycraft Sand Sort

Sol 首先 \(c\) 不能变,否则第一列就会改变。 然后注意到 \(i,j(i<j)\) 能交换当且仅当满足以下任意一条:\(\displaystyle\max_{k=i+1}^{j-1}a_k<\min(a_i,a_j)\) i+1=j那么考虑从小到大做,每次把小的数删除,…

使用eBPF技术保护FastAPI安全

本文详细介绍如何利用eBPF技术保护面向互联网的API安全,包括FastAPI、Flask、Django等框架。通过secimport工具实现Python代码的实时追踪、沙箱策略构建和运行时监控,有效防御远程代码执行等安全威胁。使用eBPF保护F…

项目案例作业2:对案例进行面向对象分析

学生管理系统面向对象分析报告 小组成员:李天瑞 202421336012 目录学生管理系统面向对象分析报告1. 案例中哪里体现出了封装性及其好处?封装性的体现封装性带来的好处2. 案例中的setter/getter模式与封装性什么是set…

20251010周五日记

20251010周五日记今天十点多回学校了,好不容易不下雨了。没想到国庆还真加了那么多天班= = 今日: 1.早上吃完早饭收拾东西慢慢悠悠回来了,打印朋辈表多亏师哥妙手回春。准备去开学代会,说来又要翘课了。 2.中午吃了…