[20260107]建立完善b5.sql脚本.txt

来源:这里教程网 时间:2026-03-03 23:05:21 作者:

[20260107]建立完善b5.sql脚本.txt --//以前写的生成执行SQL语句的执行脚本b5.sql,存在1个问题,就是无法抓取timestamp类型,适当修改解决此问题,并做了适当调整。 --//比如改用gv$sqlarea视图并且取一条记录,当然缺点就是如果不在共享池,无法抓取sql语句。 --//不过该脚本我个人很少使用,当然还是存在许多问题,to_char(sql_fulltext)超过4000个字符报错. $ cat b5.sql /* Formatted on 2026-01-08 17:03:13 (QP5 v5.277) */ SET FEEDBACK OFF SET HEAD OFF SET VERIFY OFF DEFINE sql_id=&1 -- --Ascertain child_no , inst_id -- COL CHILD_NUMBER  NEW_VALUE CHILD_NO COL INST_ID   NEW_VALUE INST_ID OLD_VALUE INST_ID SET TERMOUT OFF SELECT child_number, inst_id   FROM GV$SQL  WHERE sql_id = '&&sql_id' AND ROWNUM = 1; SELECT child_number, inst_id   FROM GV$SQL_BIND_CAPTURE  WHERE sql_id = '&&sql_id' AND ROWNUM = 1; SET TERMOUT ON SPOOL &&1..sql5 SELECT 'set sqlblanklines on' txt FROM DUAL UNION ALL SELECT 'alter session set current_schema=' || PARSING_SCHEMA_NAME || ';' txt   FROM gv$sqlarea  WHERE sql_id = '&&sql_id' AND ROWNUM = 1 UNION ALL SELECT 'alter session set statistics_level=all;' txt FROM DUAL; SELECT '--@10046on 12' txt FROM DUAL; SELECT 'begin' txt FROM DUAL UNION ALL SELECT    'execute immediate q'''        || CHR (7)        || (SELECT TO_CHAR (sql_fulltext) txt              FROM gv$sqlarea             WHERE sql_id = '&&1' AND ROWNUM = 1)        || CHR (7)        || ''' using'           txt   FROM DUAL UNION ALL --SELECT LISTAGG ( DECODE ( DATATYPE_STRING ,'NUMBER', value_string --            ,'DATE', '''' || TO_CHAR ( TO_DATE (value_string, 'mm/dd/yy hh24:mi:ss') ,'yyyy/mm/dd hh24:mi:ss') || '''' --            ,'TIMESTAMP', '''' ||TO_CHAR ( ANYDATA.accesstimestamp (value_anydata) ,'yyyy/mm/dd hh24:mi:ss.ff9')|| '''' --            ,'''' || value_string || '''') ,CHR (10) || ',') WITHIN GROUP (ORDER BY POSITION) --          txt --  FROM gv$sql_bind_capture -- WHERE     sql_id = '&&sql_id' --      AND child_number = &&child_no --       AND inst_id = &&inst_id --       AND was_captured = 'YES' --       AND DUP_POSITION IS NULL SELECT LISTAGG (              --CASE  WHEN (datatype_string='NUMBER' or value_string='NULL') THEN NULL ELSE '' END ||              CASE datatype_string                 WHEN 'NUMBER'                 THEN                    DECODE (value_string, 'NULL', NULL, NVL (value_string, '00'))                 WHEN 'DATE'                 THEN                       'TO_DATE('''                    || TO_CHAR (TO_DATE (value_string, 'mm/dd/yy hh24:mi:ss'), 'yyyy/mm/dd hh24:mi:ss')                    || ''',''yyyy/mm/dd hh24:mi:ss'')'                 WHEN 'TIMESTAMP'                 THEN                       'TO_TIMESTAMP('''                    || TO_CHAR (ANYDATA.accesstimestamp (value_anydata), 'yyyy/mm/dd hh24:mi:ss.ff9')                    || ''',''yyyy/mm/dd hh24:mi:ss.ff9'')'                 ELSE                    '''' || DECODE (value_string, 'NULL', NULL, NVL (value_string, '00')) || ''''              END           || '  --  '           || name          --|| CASE  WHEN (datatype_string='NUMBER' or value_string='NULL') THEN NULL ELSE '' END          ,CHR (10) || ',')        WITHIN GROUP (ORDER BY POSITION)           txt   FROM v$sql_bind_capture  WHERE sql_id = '&&1' AND child_number = &&child_no AND was_captured = 'YES' AND DUP_POSITION IS NULL UNION ALL SELECT ';' txt FROM DUAL UNION ALL SELECT 'end;' txt FROM DUAL UNION ALL SELECT '/' txt FROM DUAL; SELECT '@dpc &sql_id outline ''''' txt FROM DUAL; SELECT 'set sqlblanklines off' txt FROM DUAL UNION ALL SELECT 'rollback;' txt FROM DUAL UNION ALL SELECT '--@10046off' txt FROM DUAL UNION ALL SELECT 'alter session set current_schema=' || USER || ' ;' txt   FROM DUAL; PROMPT SPOOL OFF UNDEF sql_id UNDEF child_no UNDEF inst_id SET FEEDBACK 6; SET HEAD ON SET LINESIZE 277

相关推荐