natural join 以及 v$statname , v$sessstat

oracle natural join是一个比较方便的用法。如果两个表的某些字段名称相同,类型相同,natural join就会把他们做等值连接。比如下面我们知道这两个视图的结构如下:

SQL> desc v$sesstat
 Name                                        Null?    Type
 ------------------------------------------- -------- ------------------------------
 SID                                                  NUMBER
 STATISTIC#                                           NUMBER
 VALUE                                                NUMBER

SQL> desc v$statname
 Name                                        Null?    Type
 ------------------------------------------- -------- ------------------------------
 STATISTIC#                                           NUMBER
 NAME                                                 VARCHAR2(64)
 CLASS                                                NUMBER
 STAT_ID                                              NUMBER

它们的statistic# 也就是统计信息id 这个字段名字和类型都相同,所以如果用 natural join 就可以如下:

select sum(value) from v$statname natural join v$sesstat where name='session pga memory';

这个查询也等价于

select sum(value) from v$statname a join v$sesstat b on a.STATISTIC#=b.STATISTIC# where name='session pga memory';

但是要注意的是这两个查询返回的值略有不同,因为这个查询返回PGA总使用量。而pga总使用量是会变化的。

原文地址:https://www.cnblogs.com/kramer/p/3421091.html