Veröffentlicht: von

CONSTRAINTS

  • Es gibt unter Oracle mehrere Namensräume, und zwar einen für Tabellen, View, Sequenzen, Private Synonyme, benutzerdefinierte Datentypen je user, eine  Namensraum für alle  Indizes je user, einem Namensraum für alle CONSTRAINTS je user und einen generellen Namensraum mit Usernamen, Rollen und öffentlichen Synonymen.
  • CONSTRAINT ohne Namen bekommen  einen solchem vom System verpasst: SYS_scn;
  • Ein NOT NULL CONSTRAINT muss immer als Spaltenconstraint vereinbart werden (heißen im Buch: inline constraint)
  • Ein Foreign-Key-Constraunt kann auch auf einem UNIQUE KEY vereinbart werden.
  • Tabellenbedingung = OUT OF LINE  CONSTRAINT
  • Auf den Datentypen BLOB, CLOB und TIMESTAMP WITH TIME ZONE kann kein Primärschlüssel und auch kein UNIQUE KEY definiert werden.
  • Ein BLOB oder CLOB kann auf IS NULL geprüft werden.
  • Es können nur CONSTRAINTS auf DEFERRED gesetzt werden, die vorher mit DEFERRABLE vereinbart wurden (siehe: SET CONSTRAINTS)

Datentypen für Zeitfelder unter Oracle

  1. DATE: beinhaltet year, month, date , hour, minute, second, keine Sekundenbruchteile
  2. NLS_DATE_FORMAT ist eine Systemvariable, die das Ausgabeformat festlegt, genau wie nls_language
  3. TIMESTAMP(n) hat zusätzlich zu DATE noch Sekundenbruchteile, Genauigkeit n, default n=6
  4. TIMESTAMP WITH TIME ZONE speichert zusätzlich die Zeitzone des DB-Servers beim Datumswert. z.B. +2:00
  5. TIMESTAMP WITH LOCAL TIME ZONE ist der Zeitstempel, der auf dem Datenbankclient gültig ist, nicht auf dem Server.
  6. Anfrage mit Datumsfunktionen : SELECT DBTIMEZONE, SESSIONTIMEZONE , SYSTIMESTAMP, LOCALTIMESTAMP  FROM DUAL;
  7. INTERVAL YEAR(n) TO MONTH: Zeitinterval für Jahre und Monate, n=2 als Default
  8. INTERVAL  DAY(n1) TO SECOND(n2) : Zeitinterval in Tagen, Stunden, Minuten, Sekunden und Sekundenbruchteilen,. DEFAULT n1 = 2, n2 = 6. Wert muss genau eingehalten werden (siehe Beispiel)
  9. Wer noch mehr wissen will: Orcale Datetime

Zum Testen:

DROP TABLE TEST_TIME;

CREATE TABLE TEST_TIME (
s0 NUMBER,
s1 TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
S2 TIMESTAMP WITH LOCAL TIME ZONE DEFAULT LOCALTIMESTAMP,
S3 INTERVAL YEAR(4)TO MONTH DEFAULT ’10-1′,
s4 INTERVAL DAY TO SECOND DEFAULT ’40 07:30:00.030000′);

INSERT into TEST_TIME(s0) VALUES (1);
SELECT * FROM TEST_TIME;