Ergebnis 1 bis 7 von 7

Thema: Existenz von Feldern prüfen

  1. #1
    vboehm ist offline Neuer Benutzer
    Registriert seit
    09.01.2008
    Beiträge
    5

    Standard Existenz von Feldern prüfen

    Hallo,
    ich suche eine Funktion oder einen Operator, die/der mir verrät, ob in einem Record ein bestimmtes Feld vorhanden ist.

    Also etwa ein
    Code:
    ...
    IF is_defined('NEW.nachname') THEN
        ...;
    END IF;
    ...
    mfg Volker

    PS: Alternativ/Zusätzlich würde mir vermutlich eine echte Referenz zu PL/pgSQL helfen, die besser (vollständiger) ist, als das Kapitel 39 des PostgreSQL-Manuals.

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

    Standard

    Zitat Zitat von vboehm Beitrag anzeigen
    Hallo,
    ich suche eine Funktion oder einen Operator, die/der mir verrät, ob in einem Record ein bestimmtes Feld vorhanden ist.

    Also etwa ein
    Code:
    ...
    IF is_defined('NEW.nachname') THEN
        ...;
    END IF;
    ...
    mfg Volker

    PS: Alternativ/Zusätzlich würde mir vermutlich eine echte Referenz zu PL/pgSQL helfen, die besser (vollständiger) ist, als das Kapitel 39 des PostgreSQL-Manuals.

    Du könntest versuchen, darauf zuzugreifen und einen Fehler abfangen.

    Code:
    test=# \d parts
          Table "public.parts"
      Column  |  Type   | Modifiers
    ----------+---------+-----------
     part     | text    |
     sub_part | text    |
     quantity | integer |
    Triggers:
        trg_insert BEFORE INSERT ON parts FOR EACH ROW EXECUTE PROCEDURE trg_parts()
    
    test=# create or replace function trg_parts() returns trigger as $$begin raise notice 'NEW.my_field : %', NEW.my_field; exception when undefined_column then raise notice 'undefined column'; return NEW; end; $$ language plpgsql;
    CREATE FUNCTION
    test=*# insert into parts values ('x','y',1);
    NOTICE:  undefined column
    INSERT 0 1

    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
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Er will dann aber sicherlich als zweites auch auf den Wert zugreifen - und das funktioniert in pl/pgSQL nicht.

    Da wirst du auf eine andere Programmiersprache ausweichen müssen.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

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

    Standard

    Zitat Zitat von ads Beitrag anzeigen
    Er will dann aber sicherlich als zweites auch auf den Wert zugreifen - und das funktioniert in pl/pgSQL nicht.
    Oach, sei nicht so pingelig ;-)

    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

  5. #5
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Ich denke halt voraus ;-)
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  6. #6
    vboehm ist offline Neuer Benutzer
    Registriert seit
    09.01.2008
    Beiträge
    5

    Standard

    Hallo,
    das ist ja schade:
    Er will dann aber sicherlich als zweites auch auf den Wert zugreifen - und das funktioniert in pl/pgSQL nicht.
    Ich wollte nämlich meine alte in Python geschrieben Funktion, um in beliebigen Tabellen ein CHANGED-Datum zu aktualisieren auf PL/pgSQL umschreiben, nachdem ich nun meinte, diese Sprache auch langsam begriffen zu haben
    Code:
    CREATE OR REPLACE FUNCTION changed()
      RETURNS trigger AS
    $BODY$ 
        if not 'datetime' in dir():
            import datetime
        if not 'changed' in TD['new']:
            return None
        if TD['event'] == 'UPDATE':
            upd = False
            for k in TD['new'].keys():
                if not TD['new'][k] == TD['old'][k]:
                    upd = True
                    break
            if not upd:
                return None
        TD['new']['changed'] = datetime.datetime.now()
        return 'MODIFY'
    $BODY$
      LANGUAGE 'plpythonu' VOLATILE
      COST 100;
    und da fällt dann wohl auch die Umsetzung der Konstruktion
    Code:
            for k in TD['new'].keys() ...
    mangels gib-mal-die-Felder-eines-Satzes() auf die Nase.

    Ansonsten lassen sich ja die meisten meiner bisher mangels PL/pgSQL-Kentnissen in PL/Python geschriebenen Funktionen in PL/pgSQL (deutlich) kürzer schreiben.

    mfg Volker

  7. #7
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    ja, genau der Punkt geht in pl/pgSQL leider nicht. Da ärgere ich mich auch schon seit Jahren.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

Ähnliche Themen

  1. Probleme mit logischen Feldern via Odbc
    Von Erich60 im Forum externe Schnittstellen
    Antworten: 4
    Letzter Beitrag: 23.11.2010, 23:32
  2. Privilegien von Benutzern prüfen
    Von araxes im Forum Benutzer- & Rechteverwaltung
    Antworten: 6
    Letzter Beitrag: 20.09.2010, 18:25
  3. Datenkonsistenz prüfen ?
    Von acki4711 im Forum Allgemeines
    Antworten: 2
    Letzter Beitrag: 20.08.2010, 10:19
  4. Anzeige von offenen Feldern mit <null>
    Von desk.top im Forum Andere Datenbanken
    Antworten: 1
    Letzter Beitrag: 14.04.2010, 07:55
  5. Select über 2 Tabellen mit leeren Feldern
    Von alex0801 im Forum SQL
    Antworten: 5
    Letzter Beitrag: 28.02.2007, 09:54

Stichworte

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