Insert v PostgreSQL 7.1.3
Karel Zak
zakkr na zf.jcu.cz
Středa Únor 6 09:57:05 CET 2002
On Wed, Feb 06, 2002 at 09:00:37AM +0100, Pavel Tyrner wrote:
> Dobry den,
> prosim o radu pro tento pripad:
> Mam tabulku, kde je m.j. pole ID, ktere je serial a tudiz se pri INSERTu
> zaznau do tabulky automaticky zvysuje jeho hodnota o 1. To vse funguje k me
> radosti v pohode :o).
> Potrebuji ale hned v nasledujicim kroku znat hodnotu onoho pridaneho ID. Da
> se to nejak vycist hned po prikazu "INSERT INTO.......", nebo musim delat
> nasledne jeste "SELECT ID ..... ORDER BY ID DESC LIMIT 1", cimz zjistim
> nejvysii (a tudiz posledni) hodnotu ID? Z tohoto SELECTU mam totiz obavy: co
> kdyz ve stejnou chvili (je to malo pravdepodobne, ale co kdyz...) vlozi do
> tabulky jeste nekdo dalsi zaznam, pak mi je onen SELECT na nic.....
Heh... dostal jste par vesmes spatnych rad. Dam vam lepsi :-)
Kazdy dotaz typu INSERT vraci OID, ktere je unikatni pro danou radku
a udrzovane PG nezavisle na definici tabulky. Pokud se podivate do
klientske klihovny najdete tam:
* PQoidValue Returns the object id of the tuple inserted, if the SQL
command was an INSERT. Otherwise, returns InvalidOid.
Oid PQoidValue(const PGresult *res);
Zjednodusene pouziti muze byt:
res = PQexec(conn, "INSERT INTO mojetab VALUES (....)");
oid = PQoidValue(res);
^^^
PQexec(conn, "SELECT id FROM mojetab WHERE oid=...");
^^^
Vetsina jazyku postavenych nad touto knihovnou obsahuje rozhrani k teto
funkci. Napr. PHP se tato funkce jmenuje pg_GetLastOid.
Karel
PS. pochopitelne je to v dokumentaci :-)
--
Karel Zak <zakkr na zf.jcu.cz>
http://home.zf.jcu.cz/~zakkr/
C, PostgreSQL, PHP, WWW, http://docs.linux.cz, http://mape.jcu.cz
Další informace o konferenci Databases