Trigger erstellen

the_green_hornet

Neuer Benutzer
Beiträge
4
Datenbank (mariadb) mit Tabelle Liste02 und Spalten id (int), bezeichnung (VCHAR(20)), menge (INT), epreis (INT) und gpreis (INT) erstellt.
Daten eingeben:
1 ITEM1 1 11 0
2 ITEM1 2 20 0

Der Trigger soll in die Spalte gpreis den Gesamtpreis berechnen, sobald beide Spalten menge und epreis > 0 ist.
Für den Preis habe ich in Cent gewählt. Ich möchte keine Rundungsfehler haben. In der Spalte gpreis möchte ich aber die Ausgabe in EUR (z.B. 12,56) haben.

Bin blutiger Anfänger.
 
Werbung:
Dann musst du vorher eine Trigger-Funktion erstellen, die der Trigger auslösen kann.

Ich würde einfach eine View erstellen, die menge und epreis multipliziert, wie ich denke, du möchtest.
Code:
create view ansicht as
select id, bezeichnung, menge, epreis, menge*epreis from table;

Dann einfach die Ansicht abfragen:
Code:
select * from ansicht;

Resultat:
Code:
1    "Item1"    1    11    11
2    "Item1"    2    20    40

EDIT:
Es geht auch mit einem Trigger, nutze jedoch ein anderes SQL, keine Ahnung, wie das bei mariadb aussieht. (außerdem recht unnötig)

EDIT2:
wenn die beiden Spalten über 0 sein sollen, wieso machst du nicht zwei Check-Constraints, der prüfen ob die menge sowie epreis über 0 sind?
 
Zuletzt bearbeitet:
Hier deine Lösungs-Idee mittels Trigger in PostgreSQL gelöst:
Code:
create table tabelle(id integer primary key, bezeichnung varchar(20), menge int, epreis int, gpreis int);

create function trigger_gpreis_tabelle() returns trigger as $$
begin
new.gpreis = new.menge*new.epreis;
return new;
end;
$$ language plpgsql;

create trigger trigger_gpreis_tabelle before insert on tabelle for each row execute procedure trigger_gpreis_tabelle();

insert into tabelle(id, bezeichnung, menge, epreis) values (1, 'Item1', 1, 11);
insert into tabelle(id, bezeichnung, menge, epreis) values (2, 'Item1', 2, 20);

Result:
Code:
select * from tabelle;
Code:
1    "Item1"    1    11    11
2    "Item1"    2    20    40
 
Datenbank (mariadb) mit Tabelle Liste02 und Spalten id (int), bezeichnung (VCHAR(20)), menge (INT), epreis (INT) und gpreis (INT) erstellt.
Daten eingeben:
1 ITEM1 1 11 0
2 ITEM1 2 20 0

Der Trigger soll in die Spalte gpreis den Gesamtpreis berechnen, sobald beide Spalten menge und epreis > 0 ist.
Für den Preis habe ich in Cent gewählt. Ich möchte keine Rundungsfehler haben. In der Spalte gpreis möchte ich aber die Ausgabe in EUR (z.B. 12,56) haben.

Bin blutiger Anfänger.
da der gpreis berechenbar ist und du sogar die Formel dafür kennst, hat diese Info in der Tabelle nicht mehr zu stehen. Dies doch zu speichern ist ein typischer Anfängerfehler. Du kannst das IMMER bei der Abfrage berechnen, Du kannst auch eine VIEW definieren.
 
Werbung:
Rundungsfehler sollten beim multiplizieren auch kein Problem sein, nur bei der Division :-)

Geldbeträge solltest du nicht in Integer speichern, schau dir mal DECIMAL an, ist dann doch irgendwie schöner:

Ansonsten würde ich auch sagen gpreis einfach im Select mit errechnen, das ist für den Anfang definitiv das Beste. Es mag später Gründe geben, errechnete Werte zu speichern, als Anfänger hat man allerdings keine guten Gründe dafür.
 
Zurück
Oben