[20240607]PL/SQL中sql语句的注解.txt --//别人测试遇到的问题,重复测试说明问题. 1.环境: SCOTT@test01p> @ ver BANNER CON_ID -------------------------------------------------------------------------------- ---------- Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 0 $ cat m2.sql DECLARE l_count PLS_INTEGER; BEGIN FOR i IN 1..&&1 LOOP SELECT /*+ find_me */ COUNT(*) INTO L_COUNT FROM DEPT WHERE DEPTNO = 10; END LOOP; END; / 2.测试1: --//session 1: SCOTT@test01p> set timing on SCOTT@test01p> @ m2.sql 10000 PL/SQL procedure successfully completed. Elapsed: 00:00:00.47 --//session 2: SYS@test> select sql_id ,sql_text,executions from v$sql where sql_text like '%find_me%' and executions>=1e4; SQL_ID SQL_TEXT EXECUTIONS ------------- ------------------------------------------------------------ ---------- b744uv7rtsf8t SELECT /*+ find_me */ COUNT(*) FROM DEPT WHERE DEPTNO = 10 10000 3.继续: $ cat m3.sql DECLARE l_count PLS_INTEGER; BEGIN FOR i IN 1..&&1 LOOP SELECT /* find_me */ COUNT(*) INTO L_COUNT FROM DEPT WHERE DEPTNO = 10; END LOOP; END; / --//仅仅注解部分没有+加号. --//退出会话刷新共享池: SYS@test> alter system flush shared_pool; System altered. --//session 1: SCOTT@test01p> @ m3.sql 30000 PL/SQL procedure successfully completed. Elapsed: 00:00:01.51 --//session 2: SYS@test> select sql_id ,sql_text,executions from v$sql where sql_text like '%find_me%' and executions>=1e4; no rows selected. --//没有发现包含find_me字符串的sql语句. --//而实际上匿名PL SQL做了特殊处理,删除注解部分,真正执行的是: --// SELECT COUNT(*) FROM DEPT WHERE DEPTNO = 10 SYS@test> select sql_id ,sql_text,executions from v$sql where sql_id='9y1zzt1h1f3pz'; SQL_ID SQL_TEXT EXECUTIONS ------------- ------------------------------------------------------------ ---------- 9y1zzt1h1f3pz SELECT COUNT(*) FROM DEPT WHERE DEPTNO = 10 30000 --//简单验证: --//session 1: SCOTT@test01p> @ m3.sql 9999 PL/SQL procedure successfully completed. Elapsed: 00:00:00.39 --//session 2: SYS@test> select sql_id ,sql_text,executions from v$sql where sql_id='9y1zzt1h1f3pz'; SQL_ID SQL_TEXT EXECUTIONS ------------- ------------------------------------------------------------ ---------- 9y1zzt1h1f3pz SELECT COUNT(*) FROM DEPT WHERE DEPTNO = 10 39999 --//如果注解部分没有+,PL/SQL对于里面的sql语句会作出特殊处理,取消注解,另外注意PL/SQL会格式化sql语句,这些在我以前blog提到.
[20240607]PL/SQL中sql语句的注解.txt
来源:这里教程网
时间:2026-03-03 20:07:50
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 怎么解决远程主机强迫关闭了一个现有连接的问题
怎么解决远程主机强迫关闭了一个现有连接的问题
26-03-03 - 远程桌面无法连接,只需五步教你连接上远程桌面
远程桌面无法连接,只需五步教你连接上远程桌面
26-03-03 - 可拷,很刑!Autoupgrade升级Oracle如喝水...
可拷,很刑!Autoupgrade升级Oracle如喝水...
26-03-03 - Oracle如何拆分字符串
Oracle如何拆分字符串
26-03-03 - [20240529]如何将字符型数据插入表时自动转成日期型.txt
[20240529]如何将字符型数据插入表时自动转成日期型.txt
26-03-03 - ORA-15196: invalid ASM block header [kfc.c:26383] [endian_kfbh] [1] [5137] [255
- 查询指定时间范围内的SQL历史执行计划
查询指定时间范围内的SQL历史执行计划
26-03-03 - kfed 磁盘组 误删除恢复
kfed 磁盘组 误删除恢复
26-03-03 - OGG 23c:安装
OGG 23c:安装
26-03-03 - 520情人劫,喜获双ACE,总给老婆最好的礼物
520情人劫,喜获双ACE,总给老婆最好的礼物
26-03-03
