Ultimo Registro en oracle

opinto
15 de Abril del 2006
Hola Estimados.

Desde hace dias, he intentado encontrar el ultimo registro de una tabla cualquiera, tengo claro que utilizando un lenguaje como Visual Basic o algun otro es relativamente facil, pero mi intencion es encontrar algun comando para incluirlo en un procedimiento almacenado, algunas personas me han mencionado el comando rowid, pero no se como utilizarlo, eso seria, gracias al que me pueda ayudar.

Saludos

Rodolfo Reyes
15 de Abril del 2006
Rowid, no es exactamente un comando. Es como una columna adicional que tienen todas las tablas de oracle. Cada vez que grabas un registro en un tabla, en la columna de rowid se graba un numero, el cual si no estoy mal tiene que ser mayor al ultimo. Esto te da una especie de funcionalidad de autonumerico. Pero esta columna, solo la puedes consultar, no le puedes hacer un insert o update.

En tonces podrias hacer algo asi.

select *
from tabla
where rowid IN
(select max rowid
from tabla
)

Lo que no me acuerdo es si necesitas algun permiso especial para poder ver la columna de rowid o si cualquier usuario que tenga permiso de select sobre la tabla puede consultar la información.


KATAMOTZ
15 de Abril del 2006
No puedes utilizar el campo ROWID para saber cual es el ultimo registro insertado en una tabla Oracle ya que el campo ROWID identifica la direccion fisica de almacenamiento del registro en la base de datos de Oracle. Puede cambiar siempre que se haga una regularizacion de Base de Datos. El programador no controla ese parametro, lo hace el motor de base de datos.

Para saber cual es el ultimo registro insertado la unica posibilidad que tienes es el utilizar un campo contador en la tabla, actualizando esta via una secuencia de Oracle. Esto sera valido para los registro nuevos para los anteriores no lo puedes saber de ninguna manera.

nerea
15 de Abril del 2006
Katamotz tiene toda la razón,... no existe el concepto de último registro. Los registros se van almacenando donde haya espacio, y la única forma de saber cuál es el último que has insertado es controlándolo tú con algún campo numérico con la fecha de inserción.

japo
15 de Abril del 2006
cascatela al sol

HILARIO
15 de Abril del 2006
bueno, wl uso de rowid y numrow funciona para una cantidad pequeña de registros, cuando estos pasan del millon, rowid y numrow devuelven regtistros que no son los esperados, si esto se lo coloca bajo una red pienso que las consecuencias serian fatales. yo vengo atravesando esta necesidad de mostrar el ultimo registro adicionado desde hace dos semanas no si hay algun metodo o truco para hacer esto, les agradeceria mucho si comparten ese conocimiento conmigo.
gracias

Jorge-DBA
15 de Abril del 2006
Esto es totalmente falso, claro que se puede conocer el último valor en la base de datos, esto se sabe con el ROWNUM de oracle y se puede hacer una sentencia select para saber cual fue el último valor insertado en una tabla.

Ejemplo:

SQL>create table clientes_acme (codigo_cliente number(2), nombre varchar2(6));

Tabla creada.

SQL> insert into clientes_acme values (04, 'Juan');

1 fila creada.

SQL> insert into clientes_acme values (09, 'Job');

1 fila creada.

SQL> insert into clientes_acme values (01, 'Pedro');

1 fila creada.

SQL> insert into clientes_acme values (10, 'Liz');

1 fila creada.

SQL> commit;

Validación terminada.

SQL> select * from clientes_acme;

CODIGO_CLIENTE NOMBRE
-------------- ------
4 Juan
9 Job
1 Pedro
10 Liz

SQL> select rownum, CODIGO_CLIENTE,nombre
2 from clientes_acme;

ROWNUM CODIGO_CLIENTE NOMBRE
---------- -------------- ------
1 4 Juan
2 9 Job
3 1 Pedro
4 1 Liz

-- Con este query se sabe cual fué el último valor insertado.

SQL> select rownum, CODIGO_CLIENTE,nombre
2 from (select rownum, CODIGO_CLIENTE,nombre
3 from clientes_acme order
4 by rownum desc)
5 where rownum=1;

ROWNUM CODIGO_CLIENTE NOMBRE
---------- -------------- ------
1 10 Liz

Saludos.

Jorge - DBA

opinto
15 de Abril del 2006
Gracias Jorge, por tu ayuda

limi
15 de Abril del 2006
No estoy de acuerdo con Jorge:
numrow devuelve el orden en que se han rescatado los registros en una conslta. Si haces querys análogas sobre una tabla, cambiando alguna condición verás como obtienes el mismo numrow para diferentes registros.

Jorge-DBA
15 de Abril del 2006
Señor,

Entiendase la definicion de ROWNUM es una pseudo columnna que informa el número del registro como es entregado en la consulta, una vez que tienes una tabla simple si insertas los registros y posteriormente los selectccionas, la consulta devolverá los registros tal y como fueron insertados,

En este caso el query se está adecuando escribiendo la cláusula "order by" esto alterará el orden de los datos informando a oracle que sean devueltos los datos en orden descendente, como puedes ver en el ejemplo se estan poniendo 2 consultas, una donde se demuentra lo que dices, si se observa con atención en la segunda consulta se encontrará que existe una combinación entre el rownum y el order by, esta existe en la cláusula del Where con un simbolo de igualdad a "1", lo que hará oracle es ordenar la inserción de todos los registros insertados, el primer registro devuelto en realidad será el primero al devolver el query los datos.

Este ejemplo no aplica para tablas TOI, para las tablas simples si aplica.

renzo
15 de Abril del 2006
Sres.

Quisirea saber si hay forma de identificar cual ha sido la ultima fila modificada o insertada y saer el momento en q lo hizo.

se los agradeceria mucho.

renzo aquino