37

Oracle 11g Express データベースのテーブルに挿入した最後の行を取得したいと考えています。これどうやってするの?

4

7 に答える 7

54

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です。

于 2012-09-11T22:01:30.447 に答える
26
SELECT * FROM (
    SELECT * FROM table_name ORDER BY sortable_column DESC
) WHERE ROWNUM = 1;
于 2015-05-11T18:11:13.353 に答える
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
        )
;

このクエリが 1 つの行だけを返すようにするには、キーをタイなしで並べ替える必要があることに注意してください。同順位が許可されている場合、このクエリは、最大のキーに関連付けられたすべての行を返します。

于 2014-06-12T12:59:07.367 に答える
1

次のように実行できます。

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;
于 2016-02-01T13:12:42.877 に答える
-1
$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;

ヒント:以下の {your_id_col_name} で ID 列名を使用する必要があります...

"RETURNING {your_id_col_name} INTO :mylastid"
于 2014-03-13T07:18:47.223 に答える