Как получить последнюю строку Oracle таблицы

Я хочу получить последнюю строку, которую я вставил в таблицу в базе данных Oracle 11g Express. Как я могу это сделать?

Ответы

Ответ 1

В таблице нет такой вещи, как "последняя" строка, так как таблица Oracle не имеет понятия порядка.

Однако, предполагая, что вы хотите найти последний вставленный первичный ключ и этот первичный ключ является увеличивающимся числом, вы можете сделать что-то вроде этого:

select *
  from ( select a.*, max(pk) over () as max_pk
           from my_table a
                )
 where pk = max_pk

Если у вас есть дата создания каждой строки, это станет, если столбец имеет имя created:

select *
  from ( select a.*, max(created) over () as max_created
           from my_table a
                )
 where created = max_created

В качестве альтернативы вы можете использовать агрегированный запрос, например:

select *
  from my_table
 where pk = ( select max(pk) from my_table )

Здесь немного SQL Fiddle, чтобы продемонстрировать.

Ответ 2

SELECT * FROM (
    SELECT * FROM table_name ORDER BY sortable_column DESC
) WHERE ROWNUM = 1;

Ответ 3

Последняя строка в соответствии со строгим полным порядком по составному ключу K (k1,..., kn):

SELECT  *
FROM    TableX AS o
WHERE   NOT EXISTS (
            SELECT  *
            FROM    TableX AS i
            WHERE   i.k1 > o.k1
                OR  (i.k1 = o.k1 AND i.k2 > o.k2)
                ...
                OR  (i.k1 = o.k1 AND i.k2 = o.k2 AND i.k3 = o.k3 AND ... AND i.kn > o.kn)
        )
;

В частном случае, когда K просто (т.е. не композит), вышесказанное сокращается до:

SELECT  *
FROM    TableX AS o
WHERE   NOT EXISTS (
            SELECT  *
            FROM    TableX AS i
            WHERE   i.k1 > o.k1
        )
;

Обратите внимание, что для этого запроса для возврата только одной строки ключ должен заказывать без связей. Если ссылки разрешены, этот запрос вернет все строки, связанные с наибольшим ключом.

Ответ 4

Вы можете сделать это следующим образом:

SELECT * FROM (SELECT your_table.your_field, versions_starttime
               FROM your_table
               VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE)
WHERE ROWNUM = 1;

Или:

SELECT your_field,ora_rowscn,scn_to_timestamp(ora_rowscn) from your_table WHERE ROWNUM = 1;

Ответ 5

select * from table_name ORDER BY primary_id DESC FETCH FIRST 1 ROWS ONLY;

Это самый простой без выполнения подзапросов

Ответ 6

$sql = "INSERT INTO table_name( field1, field2 )  VALUES ('foo','bar') 
        RETURNING ID INTO :mylastid";
$stmt = oci_parse($db, $sql);
oci_bind_by_name($stmt, "mylastid", $last_id, 8, SQLT_INT);
oci_execute($stmt);

echo "last inserted id is:".$last_id;

Совет: вам нужно использовать имя столбца id в {your_id_col_name} ниже...

"RETURNING {your_id_col_name} INTO :mylastid"