Wieso benutzt du nicht eine computed column?
https://www.firebirdsql.org/file/docume ... -ddl-table
https://stackoverflow.com/questions/641 ... erver-side
IMO, der Vorteil ist, dass deine berechnete Spalte einen "echten" Datentyp bekommt, und du ggfs. nicht durch die Botanik herum casten musst
Code: Alles auswählen
CREATE [GLOBAL TEMPORARY] TABLE tablename
[EXTERNAL [FILE] 'filespec']
(<col_def> [, {<col_def> | <tconstraint>} ...])
[{<table_attrs> | <gtt_table_attrs>}]
<col_def> ::=
<regular_col_def>
| <computed_col_def>
| <identity_col_def>
<regular_col_def> ::=
colname {<datatype> | domainname}
[DEFAULT {<literal> | NULL | <context_var>}]
[<col_constraint> ...]
[COLLATE collation_name]
-- HIER!!!
<computed_col_def> ::=
colname [{<datatype> | domainname}]
{COMPUTED [BY] | GENERATED ALWAYS AS} (<expression>)
also in der Art
Code: Alles auswählen
CREATE TABLE RechnungsPos
(ID INT, Menge INT, ekpreis DOUBLE, Summe DOUBLE GENERATED ALWAYS AS (Menge*ekpreis)
);
Und das "Round" brauchste erst beim abholen (SELECT).
Da es sich hier um "Geld" handelt, möchte ich an den "Trick" erinnern, für ekpreis ggfs. Integer zu verwenden, und beim Speichern/Abholen einfach das Komma zu verschieben.
Also im Sinne von: ekpreis ist dann in "EURO-Cent" (Nicht EURO)
Bsp. ekpreis = 1234 --> "1234 €-Cent" ("12,34 €")
Bei der Berechnung (Summe) wäre das einfach eine Multiplikation von zwei Integers, und zur Anzeige (Im SELECT) dann einfach geteilt durch 100.
Kein Runden notwendig
Oder das geteilt durch 100 gleich in die computed Column
Code: Alles auswählen
CREATE TABLE RechnungsPos
(ID INT, Menge INT, ekpreis INT, Summe DOUBLE GENERATED ALWAYS AS (Menge*ekpreis/100.0)
);
Nachtrag: Das Runden brauchst du nur, falls "Menge" keine Integers wären (Bsp. "7,5 Meter")