[20200213]函数nullif使用.txt --//nullif函数自己知道很少使用,我发现人家写的脚本使用它避免做除法时如果除数为0报ORA-01476的问题。 --//通过例子说明,比如我写的脚本: $ cat d_buffer.sql col executions1 new_value x1 col buffer_gets1 new_value x2 col ELAPSED_TIME1 new_value x3 col ROWS_PROCESSED1 new_value x4 col executions2 new_value y1 col buffer_gets2 new_value y2 col ELAPSED_TIME2 new_value y3 col ROWS_PROCESSED2 new_value y4 col var3 new_value var3 select executions executions1,buffer_gets buffer_gets1,elapsed_time elapsed_time1,rows_processed rows_processed1 from v$sqlarea where sql_id='&&1'; prompt ... sleep &&2 , waiting .... host sleep &&2 select executions executions2,buffer_gets buffer_gets2,elapsed_time elapsed_time2 ,rows_processed rows_processed2 from v$sqlarea where sql_id='&&1'; select &y2-&x2 "总buffer_gets", (&y2-&x2)/(&y1-&x1) "每次buffer_gets",&y1- &x1 "执行次数" , &y3-&x3 "总执行时间", (&y3-&x3)/(&y1-&x1) "每次执行时间" , &y4-&x4 "总处理记录数",(&y4-&x4)/(&y1-&x1) "平均处理记录数" from dual ; --//主要是优化sql语句后,我发现有时候清除sql语句从共享池后,如果再次执行后executions,buffer_gets等信息并没有彻底清除。 --//这样我很难比较优化后效果,因此写了上面脚本。脚本有1个问题如果检测时间内没有执行,这样executions没有变化,作为除数就会报错。 SYS@book> @ d_buffer 4xamnunv51w9j 2 EXECUTIONS1 BUFFER_GETS1 ELAPSED_TIME1 ROWS_PROCESSED1 ----------- ------------ ------------- --------------- 1 62 5988 1 ... sleep 2 , waiting .... EXECUTIONS2 BUFFER_GETS2 ELAPSED_TIME2 ROWS_PROCESSED2 ----------- ------------ ------------- --------------- 1 62 5988 1 select 62- 62 "总buffer_gets", ( 62- 62)/( 1- 1) "每次buffer_gets", 1- 1 "执行次数" , 5988- 5988 "总执行时间", ( 5988- 5988)/( 1- 1) "每次执行时间" , 1- 1 "总处理记录数",( 1- 1)/( 1- 1) "平均处理记录数" from dual * ERROR at line 1: ORA-01476: divisor is equal to zero --//利用nullif函数就能很好的避免这个问题。 SCOTT@book> select nullif(1,0),nullif(0,0),nullif(1,1) from dual ; NULLIF(1,0) NULLIF(0,0) NULLIF(1,1) ----------- ----------- ----------- 1 --//nullif就是比较参数1,参数2,如果相等就输出NULL。 --//只要第1个参数等于第2个参数,输出就是NULL类型。改写如下就不会报错了。 $ cat d_buffer.sql col executions1 new_value x1 col buffer_gets1 new_value x2 col ELAPSED_TIME1 new_value x3 col ROWS_PROCESSED1 new_value x4 col executions2 new_value y1 col buffer_gets2 new_value y2 col ELAPSED_TIME2 new_value y3 col ROWS_PROCESSED2 new_value y4 col var3 new_value var3 select executions executions1,buffer_gets buffer_gets1,elapsed_time elapsed_time1,rows_processed rows_processed1 from v$sqlarea where sql_id='&&1'; prompt ... sleep &&2 , waiting .... host sleep &&2 select executions executions2,buffer_gets buffer_gets2,elapsed_time elapsed_time2 ,rows_processed rows_processed2 from v$sqlarea where sql_id='&&1'; SELECT &y2 - &x2 "总buffer_gets" , (&y2 - &x2) / NULLIF (&y1 - &x1, 0) "每次buffer_gets" ,&y1 - &x1 "执行次数" ,&y3 - &x3 "总执行时间" , (&y3 - &x3) / NULLIF (&y1 - &x1, 0) "每次执行时间" ,&y4 - &x4 "总处理记录数" , (&y4 - &x4) / NULLIF (&y1 - &x1, 0) "平均处理记录数" FROM DUAL; SYS@book> @ d_buffer 4xamnunv51w9j 1 EXECUTIONS1 BUFFER_GETS1 ELAPSED_TIME1 ROWS_PROCESSED1 ----------- ------------ ------------- --------------- 2 50 3834 2 ... sleep 1 , waiting .... EXECUTIONS2 BUFFER_GETS2 ELAPSED_TIME2 ROWS_PROCESSED2 ----------- ------------ ------------- --------------- 2 50 3834 2 总buffer_gets 每次buffer_gets 执行次数 总执行时间 每次执行时间 总处理记录数 平均处理记录数 ------------- --------------- ---------- ---------- ------------ ------------ -------------- 0 0 0 0
[20200213]函数nullif使用.txt
来源:这里教程网
时间:2026-03-03 15:00:05
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- Oracle 12C新特性In-Memory
Oracle 12C新特性In-Memory
26-03-03 - Oracle 19C 无法启用Auto Indexes特性
Oracle 19C 无法启用Auto Indexes特性
26-03-03 - Oracle 12C安装
Oracle 12C安装
26-03-03 - Oracle Database 19c安装Sample Schemas
Oracle Database 19c安装Sample Schemas
26-03-03 - oracle rac 的优点和缺点
oracle rac 的优点和缺点
26-03-03 - Oracle delete误操作数据恢复(BBED)
Oracle delete误操作数据恢复(BBED)
26-03-03 - Oracle 12C新特性-RMAN恢复表
Oracle 12C新特性-RMAN恢复表
26-03-03 - Oracle Linux 7.5下载和安装
Oracle Linux 7.5下载和安装
26-03-03 - PLSQL 连接服务器与执行SQL语句非常慢
PLSQL 连接服务器与执行SQL语句非常慢
26-03-03 - Oracle 19C下载和安装(二)
Oracle 19C下载和安装(二)
26-03-03
