tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
275
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Lei0812 Lei0812 ist offline Mitglied
    Registriert seit
    Apr 2007
    Beiträge
    10
    Hallo,

    kann jemand mir sagen, ob das folgende Befehl richtig ist?

    Alter table STANDORT add constraint ck1_STANDORT CHECK (trasse IN (decode (trasse,'h','Haupttrassenstandort','n','Normaltrassenstandort')));

    Ich bin für jede Antwort sehr dankbar.
     

  2. #2
    lmarkus31 lmarkus31 ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Beiträge
    318
    Hallo,

    Was möchtest du erreichen? Jetzt mal unabhängig von der Definition des Constraints.
    Rein syntaktisch ist das Statement richtig.
    Aber im Moment testet du auf die gleiche Spalte. Falls das so gewünscht ist, sind im Moment nur die Werte "Hauptstrassenstandort" und "Normalstrassenstandort" gültige Werte für die Spalte "trasse". Ich glaub du möchtest aber was anderes erreichen.

    Markus
     

  3. #3
    Lei0812 Lei0812 ist offline Mitglied
    Registriert seit
    Apr 2007
    Beiträge
    10
    Hallo Markus,

    vielen Dank für deine Antwort. Ich möchte eine Gültigkeitsregel für diese Spalte anlegen und möchte auch dazu zeigen, was genau die Abkürzungen bedeuten. Ist so in Ordnung?

    Viele Grüsse
     

  4. #4
    lmarkus31 lmarkus31 ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Beiträge
    318
    Hallo,

    leider nein, da die Abkürzungen selbst keine gültigen Spalteneinträge sind.

    Ich sehe zwei Möglichkeiten das ganze sinnvoll zu lösen:

    1) neue Tabelle erzeugen für die Einträge, die deine Spalte annehmen kann. Dort trägst du dann sowohl die Abkürzungen an wie auch den Text dazu. Die Abkürzuung bildet den Primärschlüssel. Dann legst du auf deine Spalte "trasse" einen Fremdschlüssel. Dann kannst du über Joins jederzeit den Text zu deiner "Abkürzung" herausfinden und stellst gleichzeitig sicher, dass keine anderen Werte eingegeben werden dürfen.

    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    CREATE TABLE trassentypen
    (  
       typKuerzel      VARCHAR2(2) PRIMARY KEY,
       typBeschreibung VARCHAR2(50)
    );
     
    INSERT INTO trassentypen (typKuerzel,typBeschreibung) VALUES ('H','Haupttrasse');
    INSERT INTO trassentypen (typKuerzel,typBeschreibung) VALUES ('N','Nebentrasse');
     
     
    ALTER TABLE standort ADD CONSTRAINT fk_trassentypen FOREIGN KEY (trasse) REFERENCES trassentypen (typKuerzel);

    2. Wenn es Dir "nur" darum geht, dass der Spalteninhalt dokumentierrt ist, dann machst du folgendes:

    Code sql:
    1
    2
    3
    
    ALTER TABLE standort ADD CONSTRAINT ck1_STANDORT CHECK ( trasse IN('H','N') );
     
    COMMENT ON COLUMN standort.trasse IS 'Trassentyp: H=Haupttrasse, N=Nebentrasse';

    Markus
     

  5. #5
    Lei0812 Lei0812 ist offline Mitglied
    Registriert seit
    Apr 2007
    Beiträge
    10
    Halllo Markus,

    mit deiner Hilfe habe ich das Problem schon erledigt, vielen Dank.

    Viele Grüsse
    Lei
     

Ähnliche Themen

  1. Frage über .h, .lib
    Von pepsi_gx im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 13.08.09, 11:24
  2. Frage über Steuerzeichen
    Von pepsi_gx im Forum C/C++
    Antworten: 5
    Letzter Beitrag: 05.08.09, 08:06
  3. SQL Check über mehrer Attribute
    Von a3quitas im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 13.11.08, 20:52
  4. Frage über Datensatzsortierung
    Von BladeNeo im Forum PHP
    Antworten: 3
    Letzter Beitrag: 06.04.04, 08:21
  5. XP-PC aufgehangen, Machine Check Exception, Frage zu DMP-Dateien.
    Von wackelpudding im Forum Microsoft Windows
    Antworten: 0
    Letzter Beitrag: 10.08.03, 11:38