Insert v PostgreSQL 7.1.3

David Zabensky zabensky na ica.cz
Středa Únor 6 10:20:05 CET 2002


Karel Zak wrote:
> 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 :-)
> 
> 

No nevim, v puvodnim dotazu nebylo ani slovo o C ci PHP, Perlu, Pythonu....
Tazatel se ptal na reseni na urovni SQL/PLSQL. Samozrejme existuje spousta
dalsich zpusobu (a nekdy i efektivnejsich), zalezi na situaci. Ale ze by ostatni
reakce byly vesmes spatne bych se neodvazoval tvrdit... PGSQL umoznuje (na rozdil
treba od MySQL) prenest logiku zpracovani dat na uroven DB, nechapu tedy proc
to tahat do PHP ci nekde jinde.

D



Další informace o konferenci Databases