Ergebnis 1 bis 6 von 6

Thema: Wie kann ein Array mittels Domain oder Funktion validiert werden?

  1. #1
    jazzhunter ist offline Neuer Benutzer
    Registriert seit
    18.07.2011
    Beiträge
    6

    Standard Wie kann ein Array mittels Domain oder Funktion validiert werden?

    hallo,

    ich möchte bei Eingabe eines Array-Wertes in eine Tabelle nur bestimmte Werte zulassen. Um das zu validieren benötige ich also eine DOMAIN oder FUNKTION.

    Angenommen es gibt ein Attribut Namens axisdirlists mit dem Datentyp text[].
    Dazu habe ich folgende DOMAIN, die die eingegebenen Werte über folgenden regulären Ausdruck überprüfen soll.

    Code:
    CREATE DOMAIN AxisDirectionList AS text[] CHECK(
            VALUE[0] ~ '[\+\-][1-9][0-9]*'
    );
    In diesem Fall wird nur der erste Wert im text-Array überprüft. Wie kann ich alle überprüfen. Ich denke, dass man in eine DOMAIN keine FOR-Schleife setzen kann, also brauche ich wohl doch eine FUNKTION.

    für eure Hilfe wäre ich sehr dankbar

    gruß jazzhunter

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von jazzhunter Beitrag anzeigen
    hallo,

    ich möchte bei Eingabe eines Array-Wertes in eine Tabelle nur bestimmte Werte zulassen. Um das zu validieren benötige ich also eine DOMAIN oder FUNKTION.

    Angenommen es gibt ein Attribut Namens axisdirlists mit dem Datentyp text[].
    Dazu habe ich folgende DOMAIN, die die eingegebenen Werte über folgenden regulären Ausdruck überprüfen soll.

    Code:
    CREATE DOMAIN AxisDirectionList AS text[] CHECK(
            VALUE[0] ~ '[\+\-][1-9][0-9]*'
    );
    In diesem Fall wird nur der erste Wert im text-Array überprüft. Wie kann ich alle überprüfen. Ich denke, dass man in eine DOMAIN keine FOR-Schleife setzen kann, also brauche ich wohl doch eine FUNKTION.

    für eure Hilfe wäre ich sehr dankbar

    gruß jazzhunter
    Wenn ich mich recht erinnere, habe ich Dir erst vor wenigen Tagen eine Check-Funktion gezeigt, oder?


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    castorp ist offline Erfahrener Benutzer
    Registriert seit
    27.06.2009
    Beiträge
    525

    Standard

    Sollte diese "directory list" nicht lieber in eine extra Tabelle? Kling für mich danach als wäre da was nicht sauber normalisiert.
    A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

  4. #4
    jazzhunter ist offline Neuer Benutzer
    Registriert seit
    18.07.2011
    Beiträge
    6

    Standard

    Zitat Zitat von akretschmer Beitrag anzeigen
    Wenn ich mich recht erinnere, habe ich Dir erst vor wenigen Tagen eine Check-Funktion gezeigt, oder?


    Andreas
    ja das ist wohl war...

    ich hab mir diese Funktion gebastelt...

    Code:
    CREATE OR REPLACE FUNCTION check_input(text[]) returns bool AS
    $$BEGIN 
        FOR i in 0..array_upper($1,1) LOOP
            if $1[i] ~ '[\+\-][1-9][0-9]*' then return true;
            else return false;
            end if;
            END LOOP;
    END;
    $$language plpgsql;
    aber da ist noch ein fehler drin...
    wenn ich das richtig verstanden habe enthält doch der 2. Parameter bei der Funktion array_upper die Dimension, nicht wahr? ...in der Referenz wird das nicht deutlich

    gruß jazzhunter

  5. #5
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von jazzhunter Beitrag anzeigen
    ja das ist wohl war...

    ich hab mir diese Funktion gebastelt...

    Code:
    CREATE OR REPLACE FUNCTION check_input(text[]) returns bool AS
    $$BEGIN 
        FOR i in 0..array_upper($1,1) LOOP
            if $1[i] ~ '[\+\-][1-9][0-9]*' then return true;
            else return false;
            end if;
            END LOOP;
    END;
    $$language plpgsql;
    aber da ist noch ein fehler drin...
    wenn ich das richtig verstanden habe enthält doch der 2. Parameter bei der Funktion array_upper die Dimension, nicht wahr? ...in der Referenz wird das nicht deutlich

    gruß jazzhunter
    Ähm, ja. Vielleicht noch prüfen, wie die Dimensionen des Arrays sind: array_ndims().

    Anstall der Schleife würde ich vielleicht mit unnest() arbeiten.


    Natürlich kann/sollte man auch prüfen, ob ein ARRAY wirklich sinnvoll ist. Aber das wurde ja auch schon gesagt.


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  6. #6
    jazzhunter ist offline Neuer Benutzer
    Registriert seit
    18.07.2011
    Beiträge
    6

    Standard

    ok danke,

    ich habe nun auch aufgrund der Normalisierung doch eine neue Tabelle erstellt...

    gruß jazzhunter

Ähnliche Themen

  1. pljava kann nicht installiert werden
    Von APaeffgen im Forum Installation von PostgreSQL
    Antworten: 6
    Letzter Beitrag: 24.03.2009, 13:19
  2. PostgreSQL kann nicht gestartet werden
    Von Neunutzer im Forum Installation von PostgreSQL
    Antworten: 10
    Letzter Beitrag: 15.02.2009, 11:06
  3. Als Array oder doch als Tabelle?
    Von tiptop im Forum SQL
    Antworten: 5
    Letzter Beitrag: 03.11.2008, 17:10
  4. Problem PostgreSQL kann nciht Installiert werden
    Von derdeckel im Forum Installation von PostgreSQL
    Antworten: 5
    Letzter Beitrag: 04.06.2008, 10:21
  5. Installationsfehler: Dienst kann nicht gestartet werden...
    Von pupsi im Forum Installation von PostgreSQL
    Antworten: 6
    Letzter Beitrag: 09.01.2008, 15:08

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum