lunes, 12 de enero de 2015

Natural Join y ORA-25155

Si quieres unir dos tablas o dos vistas y emplear las columnas que existen en ambos objetos para emparejarlos, se puede hacerlo con un natural join. Aquí está un ejemplo que probé en Oracle 11.2:

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
 
SQL> select value/100 "CPU_Used"
  2  from v$sesstat natural join v$statname
  3  where sid = 101
  4  and name = 'CPU used by this session'
  5  /
 
  CPU_Used
----------
     40.07
 
SQL>

No se puede poner el nombre del objeto antes del nombre de la columna. Si lo haces, Oracle responde con un error ORA-25155:

SQL> select value/100 "CPU_Used"
  2  from v$sesstat natural join v$statname
  3  where sid = 101
  4  and name = 'CPU used by this session'
  5  and v$sesstat.statistic# = v$statname.statistic#
  6  /
and v$sesstat.statistic# = v$statname.statistic#
                           *
ERROR at line 5:
ORA-25155: column used in NATURAL join cannot have
qualifier
 
SQL>

Tampoco se puede emplear un alias para el objeto en un natural join:

SQL> select value/100 "CPU_Used"
  2  from v$sesstat a natural join v$statname b
  3  where sid = 101
  4  and name = 'CPU used by this session'
  5  and a.statistic# = b.statistic#
  6  /
and a.statistic# = b.statistic#
                   *
ERROR at line 5:
ORA-25155: column used in NATURAL join cannot have
qualifier
 
SQL>

No hay comentarios:

Publicar un comentario