[20211230]完善sql_id脚本.txt --//工作需要,有时候要抽取sql语句脚本。我自己经常使用两个脚本:sqlid.sql 和 sql_id.sql。 $ cat sqlid.sql column sql_fulltext format a160 column sqltext format a255 set head off prompt prompt --sql_id = &&1 prompt select to_char(replace(sql_fulltext,chr(13),'')) sqltext from v$sql where sql_id = '&&1' and rownum<=1 union select to_char(replace(sql_text,chr(13),'')) sqltext from dba_hist_sqltext where sql_id = '&&1' and rownum<=1; set head on $ cat sql_id.sql COLUMN SQL_FULLTEXT FORMAT A180 COLUMN SQLTEXT FORMAT A255 SELECT SQL_ID,HASH_VALUE,REPLACE(SQL_FULLTEXT,CHR(13),'') SQLTEXT FROM GV$SQLAREA WHERE SQL_ID='&1' AND ROWNUM=1; PROMPT VIEW DBA_HIST_SQLTEXT SELECT SQL_ID ,REPLACE(SQL_TEXT,CHR(13),'0') SQLTEXT FROM DBA_HIST_SQLTEXT WHERE SQL_ID='&&1' AND ROWNUM=1; --//为什么要有两个,主要原因一些开发仅仅使用chr(13)作为换行在PB下。导致我在sqlplus下经常看到的sql语句是乱的。 --//如果sql语句超长大于4000,我会直接使用sql_id.sql,但是输出两遍非常不好,必须重新改写sql_id脚本。 --//另外我不想输出两次,采用sqlid.sql脚本,必须使用union但是必须加to_char.如果不加会报错。 --//不加to_char使用union的情况: SYS@127.0.0.1:17101/dyhis> @sql_id d3bxwwrcjp3tt sql_id = d3bxwwrcjp3tt select replace(sql_fulltext,chr(13),'') sqltext from v$sql where sql_id = 'd3bxwwrcjp3tt' and rownum<=1 * ERROR at line 1: ORA-00932: inconsistent datatypes: expected - got CLOB --//修改成union all可以通过,但是不是我需要的。但是无法解决sql语句超长问题。 > @sqlid d3bxwwrcjp3tt select sql_id,hash_value,to_char(replace(sql_fulltext,chr(13),'')) sqltext from v$sql where sql_id = 'd3bxwwrcjp3tt' and rownum<=1 * ERROR at line 1: ORA-22835: Buffer too small for CLOB to CHAR or BLOB to RAW conversion (actual: 4552, maximum: 4000) --//单独执行如下没有问题。 > select sql_id,hash_value,replace(sql_fulltext,chr(13),'') sqltext from v$sql where sql_id = 'd3bxwwrcjp3tt' and rownum<=1; > select sql_id,hash_value,sql_fulltext sqltext from v$sql where sql_id = 'd3bxwwrcjp3tt' and rownum<=1; --//根据需要修改如下: $ cat sql_id.sql --COLUMN SQL_FULLTEXT FORMAT A180 --COLUMN SQLTEXT FORMAT A255 -- --SELECT SQL_ID,HASH_VALUE,REPLACE(SQL_FULLTEXT,CHR(13),'') SQLTEXT FROM GV$SQLAREA WHERE SQL_ID='&1' AND ROWNUM=1; --PROMPT VIEW DBA_HIST_SQLTEXT --SELECT SQL_ID ,REPLACE(SQL_TEXT,CHR(13),'0') SQLTEXT FROM DBA_HIST_SQLTEXT WHERE SQL_ID='&&1' AND ROWNUM=1; --SELECT SQL_ID,TO_CHAR(SQL_FULLTEXT) SQLTEXT FROM GV$SQLAREA WHERE SQL_ID='&1' AND ROWNUM=1 --UNION --SELECT SQL_ID,TO_CHAR(SQL_TEXT) SQLTEXT FROM DBA_HIST_SQLTEXT WHERE SQL_ID='&&1' AND ROWNUM=1; SET LINESIZE 32767 --SET LINESIZE 4000 VAR V_SQL_FULLTEXT CLOB COL SQL_FULLTEXT FOR A4000 WORD_WRAP SET FEEDBACK OFF SET SERVEROUTPUT ON PROMPT PROMPT --SQL_ID = &&1 DECLARE V_SQL_FULLTEXT CLOB; V_COUNT NUMBER; BEGIN SELECT COUNT(*) INTO V_COUNT FROM GV$SQLAREA WHERE SQL_ID = '&&1' AND ROWNUM=1; IF V_COUNT=1 THEN SELECT REPLACE (SQL_FULLTEXT||';', CHR(13), '') SQL_FULLTEXT INTO V_SQL_FULLTEXT FROM GV$SQLAREA WHERE SQL_ID = '&&1' AND ROWNUM = 1; DBMS_OUTPUT.PUT_LINE (V_SQL_FULLTEXT); ELSE SELECT COUNT(*) INTO V_COUNT FROM DBA_HIST_SQLTEXT WHERE SQL_ID='&&1' AND ROWNUM=1; IF V_COUNT=1 THEN SELECT REPLACE (SQL_TEXT||';',CHR(13),'') INTO V_SQL_FULLTEXT FROM DBA_HIST_SQLTEXT WHERE SQL_ID='&&1' AND ROWNUM=1; DBMS_OUTPUT.PUT_LINE (V_SQL_FULLTEXT); END IF; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END; / PROMPT SET SERVEROUTPUT OFF SET FEEDBACK 6 SET LINESIZE 277 --//这样基本可以满足我工作需求。实际上使用replace也有现在,最大不能超过32767,一般很少出现怎么超长的sql语句。 --//另外必须设置SET LINESIZE 32767 , 不然输出的sql语句仅仅输出受linesize的限制。
[20211230]完善sql_id脚本.txt
来源:这里教程网
时间:2026-03-03 17:22:23
作者:
编辑推荐:
- [20211230]完善sql_id脚本.txt03-03
- Oracle Grid Infrastructure for a Standalone Server03-03
- 储存卡误删都能恢复吗?这个方法大家用了都说好03-03
- [20211217]滑稽可笑的程序代码2.txt03-03
- 电脑怎么找回彻底删除的文件?大家都说简单的方法03-03
- [20211231]set linesize and dbms_output.line输出问题.txt03-03
- [20211229]sql语句包含中文保存clob的编码问题.txt03-03
- [20211231]ORA-01418 specified index does not exist.txt03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- Oracle Grid Infrastructure for a Standalone Server
- 储存卡误删都能恢复吗?这个方法大家用了都说好
储存卡误删都能恢复吗?这个方法大家用了都说好
26-03-03 - 电脑怎么找回彻底删除的文件?大家都说简单的方法
电脑怎么找回彻底删除的文件?大家都说简单的方法
26-03-03 - 【Oralce漏洞与安全】AHF的Log4j漏洞修复
【Oralce漏洞与安全】AHF的Log4j漏洞修复
26-03-03 - Oracle 21C区块链表
Oracle 21C区块链表
26-03-03 - 聊聊虚拟化和容器对数据库的影响
聊聊虚拟化和容器对数据库的影响
26-03-03 - AS、SAN、NAS三种存储
AS、SAN、NAS三种存储
26-03-03 - 十个关于互联网圈的冷知识
十个关于互联网圈的冷知识
26-03-03 - Oracle:SCN
Oracle:SCN
26-03-03 - 内存卡视频删除后怎么恢复?三个步骤一看就会
内存卡视频删除后怎么恢复?三个步骤一看就会
26-03-03
