Versio

[pgSQL]Nextval()

Overzicht Reageren

Jurgen assaasas

Jurgen assaasas

01/06/2008 17:31:00
Quote Anchor link
Ik heb voor een applicatie die ik aan het schrijven ben de waarde nodig die na een insert wordt teruggegeven, normaal zou je dit doen met PDO::lastInsertId() maar dit ondersteunt PostgreSQL niet. Ik heb dus even hier op het forum en op google gezocht en kwam op de volgende query om die waarde op te vragen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT NEXTVAL('media.type_id_seq') AS type_id;


Deze query zou normaal gesproken bij het fetchen 1 resultaat bevatten en dat is de volgende waarde van de sequence. Enkel krijg ik als ik deze query uitvoer in pgAdmin III de volgende melding;

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
ERROR:  relation "media.type_id_seq" does not exist

********** Fout **********

ERROR: relation "media.type_id_seq" does not exist
SQL status:42P01


Heeft iemand een idee hoe ik dit oplos? Op google kon ik er niets over vinden, ook niet in de PostgreSQL handleiding.
 
PHP hulp

PHP hulp

25/05/2012 10:03:38
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Noppes

Noppes

01/06/2008 17:40:00
Quote Anchor link
Je kan geen verwijzingen gebruiken in nextval, de bottelnek is dus 'media.'

Het is dus SELECT NEXTVAL(sequencenaam)
 
Jurgen assaasas

Jurgen assaasas

01/06/2008 17:42:00
Quote Anchor link
Als ik de query uitvoer zonder het schema naam krijg ik exact dezelfde fout.
 
Noppes

Noppes

01/06/2008 17:45:00
Quote Anchor link
Weet je zeker dat je die sequence goed aangemaakt hebt?

CREATE [ TEMPORARY | TEMP ] SEQUENCE
name
[ INCREMENT [ BY ]
increment
]
[ MINVALUE
minvalue
| NO MINVALUE ] [ MAXVALUE
maxvalue
| NO MAXVALUE ]
[ START [ WITH ]
start
] [ CACHE
cache
] [ [ NO ] CYCLE ]
 
Jurgen assaasas

Jurgen assaasas

01/06/2008 17:51:00
Quote Anchor link
De sequence heeft PGSQL zelf aangemaakt en wordt gebruikt voor een primary key. Dit is de code van mijn sequence.

edit: wat een oliebol ben ik ook he, was een lettertje vergeten, de sequence heette types_id_seq ik had type_id_seq. Toch hartelijk dank voor de hulp, het werkt nu.
Gewijzigd op 01/01/1970 01:00:00 door Jurgen assaasas
 
Klaasjan Boven

Klaasjan Boven

01/06/2008 21:06:00
Quote Anchor link
In oracle werkt het als volgt:

'SELECT sequencenaam. nextval FROM dual'

Overigens krijg je nu het id van de volgende primary key
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
 
TJVB tvb

TJVB tvb

01/06/2008 21:29:00
Quote Anchor link
Je doet een select nextval van je sequence en die voer je in als id van de nieuwe regel.
Als je namelijk een rij aanmaakt en dan de huidige waarde van de sequence opvraagt kan het zijn dat er al weer een nieuwe rij is. Dat wil je niet hebben.

De nextval/currvall/lastval staan ook gewoon in de handleiding
 



Overzicht Reageren