Odkazy: dibi | API reference

Forum: [česky] [english]

dibi fórum

tiny ‘n’ smart
database layer

Nejste přihlášen(a)

#1 před rokem

Milo
dibi guru
Registrovaný: 4. 5. 2010
Příspěvky: 298

Jiný způsob getInsertId() a získávání defaulně vložených hodnot u PostgreSQL

PostgreSQL má oproti SQL standardu INSERT a UPDATE rozšířeny o klauzuli RETURNING. S její pomocí lze získat hodnoty defaultně vložené do řádku.

CREATE TABLE user (
        id     SERIAL,
        login  VARCHAR NOT NULL,
        name   VARCHAR NOT NULL,
        active INTEGER NOT NULL DEFAULT 1,
        CONSTRAINT user_pkey PRIMARY KEY(id)
);
// Nově vytvořená hodnota primárního klíče
$id = dibi::query('INSERT INTO user (login, name) VALUES (%s, %s)', $x, $y, 'RETURNING id')->fetchSingle();

// Ekvivalentem je
dibi::query('INSERT INTO user (login, name) VALUES (%s, %s)', $x, $y);
$id = dibi::getInsertId();

// Pokud ale chceme získat i to, co se defaultně vložilo do sloupce `active` můžeme
$row = dibi::query('INSERT INTO user (login, name) VALUES (%s, %s)', $x, $y, 'RETURNING id, active')->fetch();

// V případě UPDATE lze získat všechny změněné řádky
$updatedRows = dibi::query("UPDATE user SET name = 'Josef' WHERE name = 'Pepa' RETURNING id")->fetchAll();

// Vracené sloupce lze získat všechny zkráceně
'RETURNING *'

// Případně je aliasovat
'RETURNIN col1 AS [Sloupec1], col2 AS [Sloupec2]'

 

#2 před 10 měsíci

Honza Kuchař
Moderator
Registrovaný: 12. 8. 2007
Příspěvky: 1587

Re: Jiný způsob getInsertId() a získávání defaulně vložených hodnot u PostgreSQL

Díky, tohle je super! Ještěže teď stavím systém na PostgreSQL :-)

 

#3 před 5 měsíci

Semik
Člen
Registrovaný: 22. 11. 2009
Příspěvky: 49

Re: Jiný způsob getInsertId() a získávání defaulně vložených hodnot u PostgreSQL

Lze použít RETURNING i u ORacle databáze ?? Podle mě ne, protože se musí sloupce, které se mají vrátit nastavit voláním oci_bind_by_name, což v driveru není, ale myslím že by to šlo dopsat.

 

#4 před 5 měsíci

Semik
Člen
Registrovaný: 22. 11. 2009
Příspěvky: 49

Re: Jiný způsob getInsertId() a získávání defaulně vložených hodnot u PostgreSQL

Pak ještě je možnost tu vloženou hodnotu získat ze sekvence pokud jde jen o ID, ale musí to být zase v transakci aby to bylo sekvenčně.

 

Zápatí