jueves, 27 de marzo de 2014

Fetch First n Rows Only (Característica Nueva en Oracle 12)

Probé esto en Oracle 12.1. Suelo hacer los ejemplos en este blog en español pero esta vez, tengo que empezar en inglés. Ustedes verán la razón en un momento:

SQL> alter session set nls_language = 'ENGLISH'
  2  /
 
Session altered.

SQL> 

Para empezar, creé una tabla y añadí unos datos: 

SQL> create table caracter
  2  (col1 varchar2(1))
  3  /
 
Table created.
 
SQL> insert into caracter values('a');
 
1 row created.
 
SQL> insert into caracter values('b');
 
1 row created.
 
SQL> insert into caracter values('c');
 
1 row created.
 
SQL> insert into caracter values('A');
 
1 row created.
 
SQL> insert into caracter values('B');
 
1 row created.
 
SQL> insert into caracter values('C');
 
1 row created.
 
SQL> insert into caracter values('1');
 
1 row created.
 
SQL> insert into caracter values('2');
 
1 row created.
 
SQL> insert into caracter values('3');
 
1 row created.

SQL>

Luego ordené los datos y mostré los tres primeros valores. En versiones anteriores, era posible hacerlo de la manera siguiente:

SQL> select col1 from
  2  (select col1 from caracter
  3   order by col1)
  4  where rownum < 4
  5  /
 
COL1
----
1
2
3

SQL>

Ahora, en Oracle 12, se puede hacerlo así. Por supuesto, los resultados son iguales: 

SQL> select col1 from caracter
  2  order by col1
  3  fetch first 3 rows only
  4  /
 
COL1
----
1
2
3

SQL>

Pero, si ustedes hacen la prueba en español, los dos juegos de resultados son diferentes. 

SQL> alter session set nls_language = 'SPANISH'
  2  /
 
Sesión modificada.
 
SQL> select col1 from
  2  (select col1 from caracter
  3   order by col1)
  4  where rownum < 4
  5  /
 
COL1
----
A
a
B
 
SQL> select col1 from caracter
  2  order by col1
  3  fetch first 3 rows only
  4  /
 
COL1
----
1
2
3
 
SQL>

Por el momento, no sé si haya cometido un error o si sea un bug. ¿Acaso alguien pueda ayudarme?

No hay comentarios:

Publicar un comentario