🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

(gelöst) Zeichenkette als Default einer Spalte

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Freischreiber
* LO-Experte *
Beiträge: 832
Registriert: Fr 28. Mär 2014, 10:41

Re: Zeichenkette als Default einer Spalte

Beitrag von Freischreiber » So 28. Dez 2014, 15:34

Danke, funktioniert! Ja, HSQL 2.3.2.

Jetzt hab ich gleich probiert, das abzuwandeln, damit auch ein Primärschlüsselfeld ausgefüllt werden kann, aber es scheitert mit "wrong or missing data impact clause in declaration: MODIFIES SQL":

Code: Alles auswählen

CREATE TRIGGER Triggername
    BEFORE INSERT ON "t-triggertest"
    REFERENCING NEW ROW AS NEWROW
    FOR EACH ROW BEGIN ATOMIC
    IF NEWROW."zusammen" IS NULL THEN
        UPDATE "t-triggertest" SET "zusammen" = NEWROW."Nachname" ||', '||NEWROW."Vorname" WHERE "zusammen" = NEWROW."zusammen";
    END IF;
END
Es gibt wohl eine Möglichkeit, ich kriegs aber nicht rein. Die Tabelle existiert halt schon... :
http://stackoverflow.com/questions/2954 ... -in-hsqldb

Gruß
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Zeichenkette als Default einer Spalte

Beitrag von F3K Total » So 28. Dez 2014, 18:30

Hallo,
ich verstehe die Frage nicht.
Bitte erkläre genau was du in welcher, wie definierten Tabelle erreichen willst?
Am besten mit einer Beispieldatei.
R
Windows 11: AOO, LO Linux Mint: AOO, LO

Freischreiber
* LO-Experte *
Beiträge: 832
Registriert: Fr 28. Mär 2014, 10:41

Re: Zeichenkette als Default einer Spalte

Beitrag von Freischreiber » So 28. Dez 2014, 19:10

Hi,

es ist die Datei aus deinem Beispieltrigger. Wenn ich die "zusammen"-Spalte als Primärschlüssel definiert habe, klappt das Ausfüllen nicht, weil es "after insert" erst einmal leer wäre vor dem Ausfüllen durch den Trigger. Deshalb habe ich es mit "before insert" probiert, was aber so auch nicht geht...

Gruß
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Zeichenkette als Default einer Spalte

Beitrag von F3K Total » Mo 29. Dez 2014, 10:11

Dein Vorhaben kann nicht funktionieren, die Katze beißt sich in den Schwanz!
Ohne PK keine Zeile, ohne Zeile kein PK.
Darum kannst du den PK nicht mit einem Trigger "before insert" zusammensetzen.
Was funktioniert, ist eine generierte Spalte:

Code: Alles auswählen

CREATE CACHED TABLE "Namen"("Nachname" VARCHAR(50),"Vorname" VARCHAR(50),"zusammen" VARCHAR(100) GENERATED ALWAYS AS(("Nachname"||', ')||"Vorname") PRIMARY KEY)
R
Windows 11: AOO, LO Linux Mint: AOO, LO

Freischreiber
* LO-Experte *
Beiträge: 832
Registriert: Fr 28. Mär 2014, 10:41

Re: Zeichenkette als Default einer Spalte

Beitrag von Freischreiber » Mo 29. Dez 2014, 13:06

Genial! Es funktioniert wirklich!

Das kombinierte Feld wird zwar nicht gleich in der Tabelle angezeigt, aber abfragen kann man es sofort.

Vielen Dank!

Gruß
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Zeichenkette als Default einer Spalte

Beitrag von F3K Total » Mo 29. Dez 2014, 13:15

Heureka!
Hier noch ein goodie:
Gib mal eine PK-Kombination ein, die schon existiert.
Dann erzeuge diesen TRIGGER und mach's nochmal.

Code: Alles auswählen

CREATE TRIGGER ERROR_MESSAGE_PK
    BEFORE INSERT ON "Namen2"
    REFERENCING NEW ROW AS NEWROW
    FOR EACH ROW
    BEGIN ATOMIC
        DECLARE ERROR_TEXT VARCHAR(100);
        DECLARE NCOUNT INTEGER;
        SET ERROR_TEXT='Der Primärschlüssel "'||NEWROW."Nachname"||', '||NEWROW."Vorname"||'" existiert bereits';
        SET NCOUNT = select Count(*) from "Namen2" where "Nachname" = NEWROW."Nachname" AND "Vorname" = NEWROW."Vorname";
        IF NCOUNT > 0 THEN SIGNAL SQLSTATE'45000'
            SET MESSAGE_TEXT=ERROR_TEXT;
        END IF;
    END
R
Windows 11: AOO, LO Linux Mint: AOO, LO

Freischreiber
* LO-Experte *
Beiträge: 832
Registriert: Fr 28. Mär 2014, 10:41

Re: Zeichenkette als Default einer Spalte

Beitrag von Freischreiber » Mo 29. Dez 2014, 17:28

Danke, aber soviel Komfort ist gar nicht nötig. Mit den Fehlermeldungen aus der Datenbank komme ich inzwischen zurecht... aber beim Probieren sehe ich gerade eine andere: Wenn Vorname oder Nachname leer ist, ist die zusammengesetzte Zeichenkette nach diesen seltsamen Konkatenierungsregeln auch Null, und kann nicht in das Primärfeld eingefügt werden. Dann besser irgendwas mit IFNULL?

...GENERATED ALWAYS AS(IFNULL("Nachname"||', ', '')|| (IFNULL("Vorname", '')) PRIMARY KEY)

Danke
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Zeichenkette als Default einer Spalte

Beitrag von F3K Total » Mo 29. Dez 2014, 17:32

Ja, oder

Code: Alles auswählen

COALESCE()
R
Windows 11: AOO, LO Linux Mint: AOO, LO

Freischreiber
* LO-Experte *
Beiträge: 832
Registriert: Fr 28. Mär 2014, 10:41

Re: Zeichenkette als Default einer Spalte

Beitrag von Freischreiber » Sa 3. Jan 2015, 09:21

So, oder?

Code: Alles auswählen

...GENERATED ALWAYS AS (COALESCE(("Nachname"||', '),'') || (COALESCE("Vorname", '')) PRIMARY KEY)
Gutes Neues Jahr
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Zeichenkette als Default einer Spalte

Beitrag von F3K Total » Sa 3. Jan 2015, 12:15

Wenn der Nachname immer vorhanden ist, würde ich das Komma an den Vornamen hängen:

Code: Alles auswählen

CREATE CACHED TABLE "Namen"("Nachname" VARCHAR(50),"Vorname" VARCHAR(50),"zusammen" VARCHAR(100) GENERATED ALWAYS AS("Nachname"||COALESCE(', '||"Vorname",'')) PRIMARY KEY)
R
Windows 11: AOO, LO Linux Mint: AOO, LO


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten