Trigger-Procedure mit mehreren Zeilen

Kampfgummibaerlie

Datenbank-Guru
Beiträge
728
Soda, habe auf die Schnelle keinen besseren Titel für meine Frage gefunden ^^

Kurzes Beispiel:

Ich habe in der Liste "Baupläne" eine "Haube", die aus "Baumwolle" (nur ein Beispiel) gemacht wird.
Jetzt kann es sein, dass ich verschiedene Baumwollen auf "Lager" habe.

Ich glaube, ich bin beinahe am richtigem Weg, bekomme folgende Fehlermeldung:

ERROR: FEHLER: als Ausdruck verwendete Unteranfrage ergab mehr als eine Zeile CONTEXT: SQL-Anweisung »insert into produkte(stoff) values ((select stoffe.id from stoffe where stoffart = new.stoffart))«

PL/pgSQL-Funktion auto_produkte() Zeile 3 bei SQL-Anweisung SQL state: 21000

Meine Trigger-Procedure sieht so aus:

create or replace function auto_produkte() returns trigger as $$
begin
insert into produkte(stoff) values ((select stoffe.id from stoffe where stoffart = new.stoffart));
return new;
end;
$$ language plpgsql;

kann man die Trigger-Procedure irgendwie ändern, damit sie mehrmalig in Folge mit der selben stoffart-id das ganze angeht?

Danke im Voraus :)
 
Werbung:
Du suchst vermutlich
Code:
insert into produkte(stoff)
select stoffe.id from stoffe where stoffart = new.stoffart
VALUES() brauchst du nur wenn du Werte auflistest, nicht für einen Select auf eine andere Tabelle.
 
yeah, siehe @ukulele .

Mir kommen zwar gewisse Zweifel, ob dem, was Du da machst. Egal. Um das noch mal zu zeigen:

Code:
test=# create table ziel (id int);
CREATE TABLE
test=*# create table quelle (id int, val text);
CREATE TABLE
test=*# insert into quelle values (1, 'stoff 1');
INSERT 0 1
test=*# insert into quelle values (2, 'stoff 2');
INSERT 0 1
test=*# insert into quelle values (3, 'Lieblingsstoff');
INSERT 0 1
test=*# insert into quelle values (4, 'Lieblingsstoff');
INSERT 0 1
test=*# insert into ziel values ((select id from quelle where val = 'stoff 1'));
INSERT 0 1
test=*# insert into ziel values ((select id from quelle where val = 'Lieblingsstoff'));
FEHLER:  als Ausdruck verwendete Unteranfrage ergab mehr als eine Zeile
test=*# insert into ziel select id from quelle where val = 'Lieblingsstoff';
INSERT 0 2
test=*#
 
Werbung:
Wieder was gelernt :D

Was ich eig will:
Ich habe eine Tabelle Stoffarten
Ich habe eine Tabelle Stoffe
Ich habe eine Tabelle Baupläne
Ich habe eine Tabelle Produkte

Ich möchte, wenn man in die Tabelle Bauplan was einfügt, mit der Stoffart xyz, sich in die Tabelle Produkte automatisch alle möglichen Stoffe einfügen :D

Habe den Tipp noch nicht probiert, ich hoffe nur, dass man mich richtig versteht ^^

EDIT1: Danke Ukulele, wusste ich auch noch nicht ;D
 
Zurück
Oben