1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Trigger-Procedure mit mehreren Zeilen

Dieses Thema im Forum "PostgreSQL" wurde erstellt von Kampfgummibaerlie, 18 Mai 2019.

  1. Kampfgummibaerlie

    Kampfgummibaerlie Datenbank-Guru

    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 :)
     
  2. ukulele

    ukulele Datenbank-Guru

    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.
     
  3. akretschmer

    akretschmer Datenbank-Guru

    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=*#
    
     
  4. Kampfgummibaerlie

    Kampfgummibaerlie Datenbank-Guru

    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
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden