Subquerys in Function einfügen

Kampfgummibaerlie

Datenbank-Guru
Beiträge
743
Ich wusste bisher, nachdem ich auch erst ziemlich spät aktzeptiert und verstanden habe, wie die Subquerys funktionieren, habe ich, weil ich es bei einer meiner Datenbanken auch effektiv so nutzen würde, in einer Function dem Parameter einen Wert einer Subquery gegeben.

Erklärung im Voraus:
Ich habe eine Tabelle "Nachrichten", mit den Spalten id pk, absender, nachricht, raum, zeitpunkt:
Code:
create table nachrichten (id serial primary key, absender integer, nachricht text, zeitpunkt timestamp default now()::timestamp);

Ich wollte am Anfang die meisten Dinge auch "direkt" lösen, sprich mittels eines Triggers, bzw. einer weiteren Function den Benutzernamen in die Tabelle Nachrichten einfügen.
Doch, weil selbst ich neues erlernen darf, dachte ich mir, ich bastel eine Function, "message_new", mittels dem folgendem Code:
Code:
create or replace function message_new(x integer, y text, z integer) returns void as '
insert into nachrichten(absender, nachricht, raum)
values (x, y, z)' language sql;

Ich speichere den Namen, der sich zuvor eingeloggt hat in einem Cookie ab, wobei der Name natürlich unique in der Tabelle Accounts mit einem hashed Passwort steht.

Jetzt mein neues Wissen, wie ich die Function selecte, jedoch ohne den Integer des Accounts zu wissen, welcher gerade eingeloggt ist.

Von daher mache ich das Ganze mittels einer Subquery in der Function ;)
Code:
select message_new((select accounts.id from accounts where name = 'Kampfgummibaerlie'), 'Testnachricht', 1);

das mit dem Raum muss ich noch ausarbeiten, und auch mittels einer Subquery womöglich laufen lassen ;)
 
Werbung:
geht einfacher. Funktionen sind nett, haben aber auch ihre Nachteile. So weiß der Planner, wenn er die Ausführung plant, nicht, welche aktuellen Parameter dann kommen. Daher wählt er dann einen sehr konservativen Plan. Das kann in größeren Umgebungen dann auch nachteilig sein. Wenn Du Dein Weltimperium fertig aufgebaut hast, wirst das vielleicht merken ;-)
 
Werbung:
Zurück
Oben