Comment obtenir la dernière ligne D'une table Oracle a
Je veux obtenir la dernière ligne, que j'ai insérée dans une table dans une base de données Oracle 11g Express. Comment puis-je faire cela?
5 réponses
Il n'y a pas de "dernière" ligne dans une table, car une table Oracle n'a pas de concept d'ordre.
Cependant, en supposant que vous vouliez trouver la dernière clé primaire insérée et que cette clé primaire est un nombre incrémenté, vous pouvez faire quelque chose comme ceci:
select *
from ( select a.*, max(pk) over () as max_pk
from my_table a
)
where pk = max_pk
Si vous avez la date à laquelle chaque ligne a été créée, cela deviendrait, si la colonne est nommée created
:
select *
from ( select a.*, max(created) over () as max_created
from my_table a
)
where created = max_created
Vous pouvez également utiliser une requête agrégée, pour exemple:
select *
from my_table
where pk = ( select max(pk) from my_table )
Voici un peu SQL Fiddle à démontrer.
SELECT * FROM (
SELECT * FROM table_name ORDER BY sortable_column DESC
) WHERE ROWNUM = 1;
La dernière ligne selon un ordre total strict sur la clé composite 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)
)
;
Étant donné le cas particulier où K est simple (c'est-à-dire non composite), ce qui précède est raccourci à:
SELECT *
FROM TableX AS o
WHERE NOT EXISTS (
SELECT *
FROM TableX AS i
WHERE i.k1 > o.k1
)
;
Notez que pour que cette requête retourne une seule ligne, la clé doit commander sans liens. Si les liens sont autorisés, cette requête renverra toutes les lignes liées avec la plus grande clé.
Vous pouvez le faire comme ceci:
SELECT * FROM (SELECT your_table.your_field, versions_starttime
FROM your_table
VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE)
WHERE ROWNUM = 1;
Ou:
SELECT your_field,ora_rowscn,scn_to_timestamp(ora_rowscn) from your_table WHERE ROWNUM = 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;
Astuce: vous devez utiliser votre nom de colonne id dans {your_id_col_name} ci-dessous...
"RETURNING {your_id_col_name} INTO :mylastid"