暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

有趣的测试,将执行计划保存到普通的表字段中

原创 李继伟 云和恩墨 2021-02-05
633

有趣的测试,将执行计划保存到普通的表字段中。

16:00:18 SYS@men> desc scott.t4 Name Null? Type ----------------------------------------- -------- ---------------------------- ID NOT NULL NUMBER NAME VARCHAR2(30) SEX CHAR(2) BIRTH DATE MEMO VARCHAR2(4000)

开始表演:

1,选择一个执行计划:

15:49:54 SYS@men> select * from table(dbms_xplan.display_cursor('4sx88rpzuy3ar',0)) ; PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SQL_ID 4sx88rpzuy3ar, child number 0 ------------------------------------- select * from scott.t4 where id=100 Plan hash value: 127075253 -------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 1 (100)| | | 1 | TABLE ACCESS BY INDEX ROWID| T4 | 1 | 2045 | 1 (0)| 00:00:01 | |* 2 | INDEX UNIQUE SCAN | SYS_C0011623 | 1 | | 0 (0)| | -------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("ID"=100) 19 rows selected.

1,创建一个变量,用于存放执行计划。

var a varchar2(4000)

2,将执行计划作为字符串聚合,并存放到变量中。
注意,如果不按rownum 排序,那么聚合之后的字符串顺序会混乱。

exec select listagg(PLAN_TABLE_OUTPUT, chr(10)) within group (order by rownum) into :a from table(dbms_xplan.display_cursor('4sx88rpzuy3ar',0)) ;

3, 查看结果

15:53:30 SYS@men> print :a A -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SQL_ID 4sx88rpzuy3ar, child number 0 ------------------------------------- select * from scott.t4 where id=100 Plan hash value: 127075253 -------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 1 (100)| | | 1 | TABLE ACCESS BY INDEX ROWID| T4 | 1 | 2045 | 1 (0)| 00:00:01 | |* 2 | INDEX UNIQUE SCAN | SYS_C0011623 | 1 | | 0 (0)| | -------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("ID"=100)

4,验证无误后,保存到表中:

update scott.t4 set memo= :a where id=100 ; commit ;
最后修改时间:2021-02-05 16:37:28
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论