insert into function returns new.integer

Kampfgummibaerlie

Datenbank-Guru
Beiträge
743
Also, ich suche schon relativ lange, und glaube, das Ganze auch schonmal präsentiert bekommen zu haben, irgendwas mit "new.id", aber ja, ich weiß nichtmehr wirklich, wie das ging.

Also:
Ich habe eine Function:
Code:
create or replace function mietbeginn (x INTEGER, y timestamp default now()::timestamp) returns void as $$insert into vermietungen(v_maschinen_id, mietzeit) values (x, tsrange(y,y+'2 hour'));$$language sql;

Ich habe jetzt jedoch das Problem, dass ich gerne über die Function nicht void (keine Ausgabe), sondern eben die neue ID der miete ausgeben möchte.

Bisher einen Ansatz gefunden, welcher (glaube ich) aber mein bisheriges Wissen ein wenig übertrifft:
Code:
CREATE FUNCTION get_userid(username text) RETURNS int
AS $$
#print_strict_params on
DECLARE
userid int;
BEGIN
  SELECT users.userid INTO STRICT userid
  FROM users WHERE users.username = get_userid.username;
  RETURN userid;
END
$$ LANGUAGE plpgsql;

Wäre leiwand, wenn mir jemand schnell das DECLARE erklären kann.
 
Zuletzt bearbeitet:
Werbung:
was genau willst du machen? Du willst die eben vergebene ID wissen?

Dazu gibt es mind. 2 Lösungen. Currval() und RETURNING:


Code:
test=*# create table bla(id serial primary key, val text);
CREATE TABLE
test=*# insert into bla(val) values ('test 1') returning id;
 id
----
  1
(1 Zeile)

INSERT 0 1
test=*#
 
ja, ich arbeite bereits an der PHP-Seite, und möchte das ca. in folgendem Format ausgeben:

"Sie haben die Maschine: maschinen_id des Typs: maschinen_name zum Zeitpunkt lower(mietzeit) bis zum Zeitpunkt upper(mietzeit) eingetragen, und diese hat folgende Nummer: id"

Ich glaube, ich denke in meinen jungen Jahren noch ein wenig zu perfektionistisch, aber ich glaube, es kann ja nicht schaden ^^

Danke :D

EDIT:
Um das Thema abzuschließen:
Hier das Ganze in einer Function eingebaut:
(Akretschmers Vorlage in Verwendung)
Ersteinmal die Function:
Code:
create or replace function mietbeginn (x text) returns integer as $$insert into bla(val) values ('x') returning id;$$language sql;

Und dann zur Probe:
Code:
select mietbeginn('aha')

Result: 2 (1 hat das insert vom lieben mr. Akretschmer)
 
Zuletzt bearbeitet:
Folgender Code zeigt, falls man eine table returned (glaube ich, habe ich in einem anderem Thread schonmal erwähnt, oder gezeigt bekommen) (sprich mehrere Columns möchte) funktionieren folgende Code/s:

Um die Function zu erstellen:
Code:
create or replace function mietbeginn (x integer, y timestamp) returns table(v_id integer, m_id smallint, startzeit timestamp, endzeit timestamp) as $$insert
into vermietungen(v_maschinen_id, mietzeit) values (x, (tsrange(y::timestamp, y::timestamp+'2 hour'::interval))) returning miet_id, v_maschinen_id,
lower(mietzeit), upper(mietzeit);$$language sql;

Um alle Columns anzeigen zu lassen:
Code:
select * from mietbeginn ('3', '2017.01.03 08:00')

Freut mich, wie immer, werde mir noch ein wenig Eis gönnen, und mich dann wohl vor den Fernseher oder hinter den Standrechner setzen, und ein wenig gamen.
 
Werbung:
Danke für die Information ;)
Ich glaube, ich werkel Ahnungslos einfach immer weiter.
Wieviel würde es kosten, wenn man sich "jemanden" holt, der einem sagt, was man alles haben sollte? (Denke, dafür müsste ich mal einen Plan erstellen)
 
Zurück
Oben