![]() |
Virtuelles Feld
Hallo Leute
ich habe eine Tabelle mit einem feld "kontonr". Das ist ein varchar mit 4 Zeichen. Jetzt brauche ich ein zweites Feld, am besten Boolean (gibt es leider unter Firebird nicht also eine Integer mit 0/1), das wenn das erste Zeichen (immer eine Zahl) kleiner ist als 4 true ist und sonst false. Natürlich kann ich das Feld bei jeder Änderung an der Datenbank neu berechnen, aber das ist ja ziemlich aufwendig. Wie kann ich in die Tabelle einfach ein "virtuelles Feld" einfügen, das wie oben angegeben, die Werte hat. Datenbank ist Firebird Kompos sind die Std. Interbase Grüße TO |
Re: Virtuelles Feld
Hallo theomega,
solche Felder nennen sich berechnete Felder, die über COMPUTED BY definiert werden können. Aber in deinem Fall, ist der Ausdruck beim COMPUTED BY sehr schwierig!? Deshalb könntest du vielleicht ein normales Feld (z.B. isGroesser) nehmen und es wie folgst setzen:
SQL-Code:
Damit werden alle Felder auf "False gesetzt" und anschließend:
UPDATE tabTest
SET isGroesser=0
SQL-Code:
Wenn du es mit COMPUTED BY definieren willst, benötigst du eine STORED PROCEDURE oder eine UDF.
UPDATE tabTest
SET isGroesser=1 WHERE CAST(substr(erstesFeld, 1, 1) AS SMALLINT) > 4; |
Re: Virtuelles Feld
Inzwischen habe ich es zumindest so hinbekommen, das es direkt mit einem "WHere" ausgelesen wird. Das Problem ist, das Firebird kein substr kennt. Das muß man erst per UDF einbinden.
|
Re: Virtuelles Feld
Du brauchst eigentlich kein substr, sondern kannst einfach mit den alphanumerischen größer/kleiner-Operatoren arbeiten.
Ich habe gerade keine geeignete Tabelle zum Test zur Verfügung, aber es sollte so funktionieren: Dein "virtuelles Feld" soll dann true sein, wenn die Kontonummer größer als '0' ist und kleiner als '4'. Also ist es dann true,
SQL-Code:
.
if ((KONTONR > '0') and (KONTONR < '4'))
Ich denke auch, dass es nicht sehr aufwändig ist, das als festes Feld mit Triggern zu realisieren, also "Before insert" und "Before udate" etwa folgendes festzulegen:
SQL-Code:
Viel Erfolg
if ((new.KONTONR > '0') and (new.KONTONR < '4'))
then new.BOOLEAN = 1 else new.BOOLEAN = 0 Urs P.S. Wenn Du schon Daten in der Tabelle hast, müsstest Du natürlich die bisherigen Datensätze mit einem Update anpassen (s. Nachricht von MrSpock) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz