Query - Referenz

Query-Argumente

Adressierte Objekte

Argument Beispiel Kommentar
Main=[Alias, ] Source
Main= Firma,Addr
Muss, bzw. darf genau ein Mal vorkommen!
{ Related=Alias, Source, [Count], [OrderArray], [FilterExp] }
Related= FKP, Contact, One, , FKP.AddrNo = Firma.Number and FKP.IsMainContact = 1
Related= Konzern, Addr, , , Konzern.Number = Firma.HighParentCompany
Related= KKP, Contact, , , KKP.AddrNo = Konzern.Number and KKP.IsMainContact = 1
Related= Top5KP, Contact, 5, [+Top5KP.Number], Top5KP.AddrNo = Addr.Number0
Kann n Mal vorkommen und muss jeweils eine Join-Vorschrift enthalten. Grundsätzlich wird ein "Left-Outer-Join" gebildet. Bei Relationen die maximal eine Row retournieren, kann der Relation-Specifier (Count) ToOne verwendet werden.
In den Beispielen Links sind u.a. folgende Alias definiert:
FKP = Alias für Haupt-Kontaktperson von "Firma".
KKP= Alias für Haupt-Kontaktperson von "Konzern"
Wichtig
Wichtig
Wird mit OrderArray gearbeitet, müssen die Attribute zwischen eckige Klammern gesetzt werden.
Siehe auch hier: Verwendete Definitionen
Beachten Sie, dass Count=All und Count=One nicht funktionieren, wenn mit OrderArray gearbeitet wird.

Gewünschte Spalten

Argument Beispiel Kommentar
{ Column=[Alias], Attribute | ColumnExp }
Column=, Addr.Number
Column=FirmaName, Addr.FullName
Column=FirmaKontakt, AKP.FullName
Column=KonzernNr, Konzern.Number
Column=KonzernName, Konzern.FullName
Column=KonzernKontakt, KKP.FullName
Column=KontaktIdentisch, if(KKP.PersonId = AKP.PersonId, "Yes", "No")
Column=, Cust.Remark
Kann n Mal vorkommen.
Es können vordefinierte Relationen analog GetBo (hier "Cust") verwendet werden.
Wichtig
Wichtig
Der Alias ist nur für Attribute optional.
Expressions müssen zwingend mit einem Alias erfasst werden.
{ Columns=Attribute {,Attribute} }
Columns=Addr.Number,Addr.FullName
Wenn keine Alias definiert werden müssen, kann direkt mit den Attributnamen gearbeitet werden. Diese können dann innerhalb einer "Definition" mittels "Columns" erfasst werden. Die einzelnen Attribute werden dabei mit Komma separiert.
Achtung
Achtung
Diese Schreibweise ist nur für Attribute erlaubt. Nicht für Expressions!

Filter und Sortierung

Argument Beispiel Kommentar
[ Filter=FilterExp ]
Filter=Firma.HighParentCompany <> 0 and FKP.AddrNo <> NULL and KKP.AddrNo <> NULL
Darf maximal ein Mal vorkommen!
Das Schlüsselwort NULL ist nur mit Vergleich "<>" oder "=" erlaubt.
{ OrderBy= [+|-] Column[, StartValueLiteral] }
OrderBy=Konzern.Number
OrderBy=-Firma.Number
Kann n Mal vorkommen.
Die Reihenfolge ist relavant! Defaultwert ist + (Ascending)
Hinweis
Hinweis
Bitte beachten Sie folgenden Umstand:
OrderBy-Argument-Spalten werden automatisch zurückgegeben, wenn Scrolling aktiviert ist!
{ OrderByAsDate= [+|-] Column[, StartValueLiteral] }
OrderByAsDate=WhJob.Free6,12.08.2020
OrderByAsDate=-Addr.Free8
Sortieren als Datum, wobei als Folge jeweils strAsDate() angewendet werden.
{ OrderByAsNmb= [+|-] Column[, StartValueLiteral] }
OrderByAsNmb=SalDoc.Free7
Sortieren als Zahl, wobei als Folge jeweils strAsNmb() angewendet werden.
MaxRows=nn|All
MaxRows=15
Muss genau ein Mal vorkommen!
[Distinct=0|1]
[Distinct=FALSE|TRUE]
Distinct=1
Distinct=TRUE
Rows mit gleichem Inhalt werden unterdrückt.
Defaultwert ist 0/FALSE (nicht unterdrücken)

Scrolling

Argument Beispiel Kommentar
[Scrolling=code]
Scrolling=ne
Darf maximal ein Mal vorkommen!
Default: Kein Scrolling.
Unterstützt werden die Werte gem. GetBo, jedoch ohne e und eif.
Hinweis
Hinweis
Beachten Sie folgenden Umstand:
Wird Scrolling verwendet, müssen auch die Argumente MaxRows und OrderBy vorhanden sein!
[#RedoData=<Redo-Data-Token von Vorgänger-Response>]
#RedoData=[NE,[NULL,NULL,NULL],[14,3,16],[15,3,21]]
RedoData ist für die erste Page nicht notwendig.
Inhalt 1:1 gemäss Response des Vorgänger-Request.
Siehe auch Kapitel "Scrolling".
[#RedoArgs=code [,Direction] [,NmbOfRows]]
#RedoArgs=ne
RedoArgs ist für die erste Page nicht notwendig.
Siehe auch Kapitel "Scrolling".

Verwendete Definitionen

Argument Beispiel Kommentar
Alias
Muss alphanumerisch sein.
Source:=Table | BoView | CodeView | FunctionView(Arguments)
AddrText(1,3)
Table steht nur für Opacc-Interne Zwecke zur Verfügung.
Argumente werden jeweils durch Komma getrennt.
Count:=One | ToOne | First | Last | All | PositiveInteger
100
Defaultwert ist One.
0 ist nicht erlaubt!
OrderArray:=[Column {,Column}]
[+Name, -Vorname]
+ bedeutet ASC (Ascending bzw. Aufsteigend)
- bedeutet DESC (Descending bzw. Absteigend)
Default ist +

Query-Expressions

Bei der Implementierung von Query-Expressions wurden folgende Ziele verfolgt:
Wo immer möglich sollen Expressions identisch oder zumindest ähnlich funktionieren wie bei GetBo-Abfragen.
  • Funktions-Namen
  • Operatoren
  • BO-Attribut -Identifizierung
Zusätzliche Features
  • Byte-Arrays
  • Unicode-Support
  • Escaping
  • NULL-Values
  • etc.
DB-unabhängige Syntax
  • Expressions müssen, unabhängig von der allfällig eingesetzten Datenbank, ihre Gültigkeit behalten.

Auswertungs-Reihenfolge

Expression-Bestandteil Kommentar
(), fn(), []
Gruppierung, Funktionsaufrufe, Arrays
+ -
Vorzeichen
* /
Punkt-Rechnung (Multiplikation und Division)
+ -
Strich-Rechnung (Addition und Subtraktion)
<, >, <=, >=, =, <>, like, notlike
Vergleichs-Operatoren
not
Logische Negation
and
Logisch UND
or
Logisch ODER

Eigene Ausdrücke

Das Argument Define bietet Ihnen die Möglichkeit, eigene Ausdrücke zu definieren und diese (auch mehrfach) in Query-Abfragen zu nutzen. Die beim Define-Argument hinterlegte Expression wird zur Laufzeit aufgelöst. Auf diese Weise lassen sich komplexe Query-Abfragen leserlicher gestalten und auch einfacher anpassen.
Argument Beispiel Kommentar
{ Define=@[Name], [Expression] }
Define=@Customer.Number,2020
Kann n Mal vorkommen.
Beispiel: Folgende Query-Abfrage liefert die Verkaufsdokumente eines bestimmten Kunden.
Query
Main=SalDoc
MaxRows=All
Filter=SalDoc.CustNo=2020
Columns=SalDoc.BoId,SalDoc.CustNo,SalDoc.SalProcLevelCd,SalDoc.ShortCut,SalDoc.Number,SalDoc.DocStateCd
Die Kunden-Nr. wird nun als Define-Argument umgesetzt. Dieselbe Query-Abfrage sieht dann so aus:
Query
Main=SalDoc
MaxRows=All
Define=@Customer.Number,2020
Filter=SalDoc.CustNo = @Customer.Number
Columns=SalDoc.BoId,SalDoc.CustNo,SalDoc.SalProcLevelCd,SalDoc.ShortCut,SalDoc.Number,SalDoc.DocStateCd

Query-Literale

Fixe Datenwerte

Datentyp Beispiel Kommentar
Nummer
-12.87
12
+0.125
Punkt als Dezimaltrennzeichen, keine e-Notation, keine Tausendertrennzeichen.
Die Angabe als String ("1.25") ist nicht erlaubt!
String
'C:\\Temp\\'
"Dies ist ein String mit \"Titel\" in Anführungszeichen"
"Und hier folgt ein Unicode-Character: \u1234"
Limitiert durch " oder ', Escaping mittels \
Real enthaltene \-Zeichen müssen «escaped» geschrieben werden. Der Support für Unicode-Character ist gegeben.
Boolean
TRUE
FALSE
Eigentlich Nummern (0 | 1)
Es wird aber die Verwendung der Konstanten TRUE und FALSE empfohlen!
Datum
13.02.1946
08.11.1973
EMPTY_DATE
Format: tt.mm.jjjj
Die Angabe als String ("13.02.1946") ist nicht erlaubt!
«Kein-Datum» wird durch die Konstante EMPTY_DATE repräsentiert.
Innerhalb eines Result, wird EMPTY_DATE als Leerstring zurückgegeben!
Byte-Array
0x01020304FAFBFCFF
Pro Byte entsprechenden Hex-Wert mit 0x als Prefix.
Listen
[1, 2, 3, 4]
['ABC', 'DEF‘]
[Val1,Val2,…,Valn]

Query-Funktionen

Logik

CodeValue Syntax Kommentar
if
if(expr,valTrue,valFalse)
Klassischer if-then-else-Ausdruck. Trifft die Bedingung (expr) zu, wird valTrue zurückgegeben, sonst valFalse.
ifnull
ifnull(expr,valInCaseOfNull)
Falls die übergebene Expression ungleich NULL ist, wird die Expression zurückgegeben, sonst (im NULL-Fall) valInCaseOfNull.

Set

CodeValue Syntax Kommentar
count
count([relationName.boAttribute])
Falls eine Relation durch ihren Namen und ein Attribut der Source spezifiziert wird, wird die entsprechende Anzahl Rows zurückgegeben.
Falls keine Relation angegeben wird, wird grundsätzlich die Anzahl passender Rows einer Query zurückgegeben.
Wird eine count()-Spalte in Kombination mit anderen Spalten (z.B. Addr.CountrySc) verwendet, wird zusätzlich gemäss diesen Spalten gruppiert (z.B. eine Result-Row mit Anzahl pro Land).
countDistinct
countDistinct([relationName.boAttribute])
Es wird die Anzahl unterschiedlicher Rows einer Query zurückgegeben.
Wichtig
Wichtig
countDistinct kann nur mit einer Relation ausgeführt werden.
exists
exists(relationName)
Prüft, ob mindestens eine Row durch die übergebene Relation geliefert wird.
Achtung
Achtung
Im Gegensatz zu den anderen Set-Funktionen hat exists keine gruppierende Wirkung!
max
max(number)
Bestimmt den Maximalwert mehrerer Zahlen. (Allfällige NULL-Werte werden ignoriert)
min
min(number)
Bestimmt den Minimalwert mehrerer Zahlen. (Allfällige NULL-Werte werden ignoriert)
sum
sum(number)
Bestimmt die Summe mehrerer Zahlen. (Allfällige NULL-Werte werden ignoriert)
avg
avg(number)
Bestimmt den Durchschnittswert mehrerer Zahlen. (Allfällige NULL-Werte werden ignoriert)

String

CodeValue Syntax Kommentar
unicode
unicode(string)
Liefert den Unicode für das erste Zeichen eines Strings.
Wird ein Leerstring oder NULL übergeben, gibt diese Funktion NULL zurück.
length
length(str)
Gibt die Länge eines Strings zurück.
uppercase
uppercase(str)
Wandelt einen String in Grossbuchstaben um.
lowercase
lowercase(str)
Wandelt einen String in Kleinbuchstaben um.
trim
trim(str)
Entfernt allfällig vorhandene führende und abschliessende Leerzeichen. Siehe auch 'ltrim' und 'rtrim'.
ltrim
ltrim(str)
Entfernt allfällig vorhandene führende Leerzeichen.
rtrim
rtrim(str)
Entfernt allfällig vorhandene abschliessende Leerzeichen.
left
left(str/bytes,length)
Kürzt einen String auf die gewünschte Länge.
Beispiel: 'left('Zürich',4)' ergibt 'Züri'.
Funktioniert in analoger Art und Weise auch für Byte-Arrays.
right
right(str/bytes,length)
Gibt die mit 'length' angegebene Anzahl Zeichen von rechts aus.
Um Baden-Baden in Baden zu verwandeln, kann folgende Syntax verwendet werden: 'right('Baden-Baden',5)'.
Funktioniert in analoger Art und Weise auch für Byte-Arrays.
mid
mid(str/bytes,length,at)
Gibt einen Substring von 'string' mit der Länge 'length' ab der Position 'at' zurück.
Beispiel: mid('Spanien',3,4) ergibt 'nie'.
Funktioniert in analoger Art und Weise auch für Byte-Arrays.
pos
pos(subStr,mainStr)
Gibt die Position eines Teilstrings (subStr) innerhalb eines Strings (mainStr) zurück.
Ist der Teilstring nicht vorhanden, wird 0 zurückgegeben.
Ist ein Argument NULL, wird NULL zurückgegeben.
replace
replace(oldSubStr,str,newSubStr)
Ersetzt den Substring 'oldSubStr' in einem String 'str' maximal ein Mal durch den neuen Substring 'newSubStr'.
Beispiel: replace('B','Bern','Luz') liefert als Resultat 'Luzern'.
Wenn 'oldSubStr' nicht in 'str' enthalten ist, wird 'str' unverändert zurückgegeben.
Wenn mindestens ein Argument NULL ist, wird als Resultat ebenfalls NULL zurückgegeben.
replaces
replaces(oldSubStr,str,newSubStr)
Ersetzt alle Substrings 'oldSubStr' in einem String 'str' durch neue Substrings 'newSubStr'.
Beispiel: replaces('u','Tuluse','ou')' liefert als Resultat 'Toulouse'.
Wenn 'oldSubStr' nicht in 'str' enthalten ist, wird 'str' unverändert zurückgegeben.
Wenn mindestens ein Argument NULL ist, wird als Resultat ebenfalls NULL zurückgegeben.

Number

CodeValue Syntax Kommentar
abs
abs(number)
Gibt den absoluten Wert einer Zahl zurück, d.h. negative Zahlen werden zu positiven konvertiert.
round
round(expr [,roundTo] [,roundMode])
Rundet den im ersten Argument übergebenen Wert.
Das zweite Argument (roundTo) ist optional. Mit diesem Argument können Sie die Rundung beeinflussen. (Default = 1)
Beispielwerte für roundTo
1 = Runden auf eine Ganzzahl. (Aus 1.23456 wird, je nach roundMode, z.B. 1)
0.001 = Runden auf Tausendstel. (Aus 1.23456 wird, je nach roundMode, z.B. 1.235)
0.05 = Runden auf fünf Hundertstel. (Aus 1.23456 wird, je nach roundMode, z.B. 1.25)
Das dritte Argument (roundMode) ist optional. Mit diesem Argument können Sie das Rundungs-Verhalten beeinflussen. (Default = 0)
0 = 'Normal' Runden
1 = Immer Aufrunden
-1 = Immer Abrunden
Für NULL wird NULL zurückgegeben.
Um gemäss den Einstellungen im OpaccOXAS Studio zu runden, kann als zweites Argument auch einer der folgenden Werte verwendet werden:
ContextInfo.RoundToPrice
ContextInfo.RoundToWeight
ContextInfo.RoundToQuantity

Date

CodeValue Syntax Kommentar
dayOfDate
dayOfDate(date)
Liefert den Tag eines Datums (als Nummer).
Für NULL wird NULL zurückgegeben, für EMPTY_DATE wird 0 zurückgegeben.
monthOfDate
monthOfDate(date)
Liefert den Monat eines Datums (als Nummer).
Für NULL wird NULL zurückgegeben, für EMPTY_DATE wird 0 zurückgegeben.
yearOfDate
yearOfDate(date)
Liefert das Jahr eines Datums (als Nummer).
Für NULL wird NULL zurückgegeben, für EMPTY_DATE wird 0 zurückgegeben.
dateAdd
dateAdd(date, count [,datePartCd])
Addiert zu einem Datum eine bestimmte Anzahl "Datums-Teile".
Standardmässig (wenn nicht weiter angegeben) werden Tage dazu addiert. Ansonsten können für "datePartCd" die Werte gemäss Code "DatePart" - also zum Beispiel "DatePart.Month" - verwendet werden.
Wenn ein Argument NULL ist, wird NULL zurückgegeben. Ebenso wird für ein EMPTY_DATE-Argument NULL zurückgegeben.
Beispiel: Zum Datum 31.10.2013 soll ein Monat addiert werden. Rückgabe: 30.11.2013
dateDiff
dateDiff(date1,date2 [,datePartCd])
Ermittelt die Differenz von "date1" minus "date2".
Standardmässig (wenn nicht weiter angegeben) wird die Differenz in Anzahl Tagen geliefert. Ansonsten können für "datePartCd" die Werte gemäss Code "DatePart" - also zum Beispiel "DatePart.Month" - verwendet werden.
Achtung
Achtung
Für diese Funktion wird DatePart.Week nicht unterstützt!
Wenn ein Argument NULL ist, wird NULL zurückgegeben. Ebenso wird für ein EMPTY_DATE-Argument NULL zurückgegeben.
today
today()
Gibt das aktuelle Datum zurück.
time
time()
Gibt die aktuelle Zeit zurück.

Namen

Grundsätzlich liefern die Funktionen «name» und «shortName» nur Bezeichnungen zu Konstanten-Werten, nicht aber zu BO-Instanzen!
  • Redefinitionen (via Redefinition zugewiesene Konstanten) werden berücksichtigt.
  • Übrige Definitionen (zum Beispiel freie Felder auf Pool-Items, abhängig von Parent-Pool) werden nicht berücksichtigt.
CodeValue Syntax Kommentar
name
a) name(viewColIdentifier [,context] [,langNo])
b) name(codeViewIdentifier, value [,langNo])
c) name(viewName, colName, value [,context] [,langNo])
Gibt die Bezeichnung eines Elements zurück.
a) Via Column-Identifier (1 bis maximal 3 Argumente)
b) Via Code-Name und Value (2 bis maximal 3 Argumente)
c) Via explizite/separate Angabe von View und View-Spalte sowie Value (3 bis maximal 5 Argumente)
Für NULL als Input, wird NULL zurückgegeben.
shortName
a) shortName(viewColIdentifier [,context] [,langNo])
b) shortName(codeViewIdentifier, value [,langNo])
c) shortName(viewName, colName, value [,context] [,langNo])
Gibt die Kurzbezeichnung eines Elements zurück.
a) Via Column-Identifier (1 bis maximal 3 Argumente)
b) Via Code-Name und Value (2 bis maximal 3 Argumente)
c) Via explizite/separate Angabe von View und View-Spalte sowie Value (3 bis maximal 5 Argumente)
Für NULL als Input, wird NULL zurückgegeben.

Konversionen

CodeValue Syntax Kommentar
nmbToStr
nmbToStr(number)
Konvertiert eine Zahl in einen String.
Für NULL wird NULL zurückgegeben.
Der Punkt wird als Dezimaltrennzeichen verwendet.
Es werden keine überflüssigen Nachkommastellen erzeugt. Falls mehr als acht Nachkommastellen vorhanden sind, wird auf die achte Stelle gerundet.
strToNmb
strToNmb(str)
Konvertiert einen String in eine Zahl.
Für NULL wird NULL zurückgegeben.
Der Punkt wird als Dezimaltrennzeichen erkannt. Ein Leerstring liefert 0. Führende/Abschliessende Leerzeichen werden ignoriert.
strAsNmb
strAsNmb(str)
Konvertiert einen String in eine Zahl.
Die Funktionsweise entspricht strToNmb, jedoch mit folgendem Unterschied:
Ist keine Konvertierung möglich (z.B. weil der String Buchstaben enthält), hat dies keinen Fehler zur Folge, sondern es wird NULL zurückgegeben.
dateToStr
dateToStr(date)
Konvertiert ein Datum in einen String vom Format tt.mm.jjjj
Für NULL wird NULL zurückgegeben, für EMPTY_DATE wird ein Leerstring zurückgegeben
strToDate
strToDate(str)
Konvertiert einen String vom Format tt.mm.jjjj in ein Datum.
Für NULL wird NULL zurückgegeben, für Leerstrings wird EMPTY_DATE zurückgegeben.
strAsDate
strAsDate(str)
Konvertiert einen String vom Format tt.mm.jjjj in ein Datum.
Die Funktionsweise entspricht strToDate, jedoch mit folgendem Unterschied:
Ist keine Konvertierung möglich (z.B. weil der String Buchstaben enthält), hat dies keinen Fehler zur Folge, sondern es wird NULL zurückgegeben.
dateToInt
dateToInt(date)
Konvertiert ein Datum in einen Integer.
Achtung! Die Abbildung ist Opacc-spezifisch und nur für den Datumsbereich 01.01.0201 bis 31.12.2500 definiert.
Für NULL wird NULL zurückgegeben, für EMPTY_DATE wird 0 zurückgegeben.
intToDate
intToDate(int)
Konvertiert einen Integer in ein Datum.
Achtung! Die Abbildung ist Opacc-spezifisch und nur für den Datumsbereich 01.01.0201 bis 31.12.2500 definiert.
Für NULL wird NULL zurückgegeben, für EMPTY_DATE wird 0 zurückgegeben.

Diverse

CodeValue Syntax Kommentar
freeTableNo
a) freeTableNo(viewColIdentifier [,context])
b) freeTableNo(viewName, colName [,context])
Liefert die Nummer der freien Hilfstabelle, die einer Spalte zugewiesen ist. Die Hilfstabelle muss via Redefinition zugeordnet sein.
a) Via Column-Identifier und optional Kontext (1 bis maximal 2 Argumente)
b) Via explizite/separate Angabe von View und View-Spalte sowie optional Kontext (2 bis maximal 3 Argumente)
Wenn keine Hilfstabelle zugeordnet ist, wird 0 zurückgegeben.
rowNo
rowNo()
Die Funktion rowNo() liefert, beginnend bei 1, eine fortlaufende Nummer für jede angezeigte Zeile (row).
Beispiel
Biz.Query
MaxRows=50
Main=Addr
Column=RowNo,rowNo()
Columns=Addr.FullName
Filter=Addr.FullName<>''
OrderBy=Addr.FullName
guid
guid()
Die neue Funktion guid() liefert Ihnen eine GUID in der Art von B7C17D42-3EF0-4BC4-BC74-44A7E237942A.
Beispiel
...
...
Column=GUID,guid()
...
...

Query-Operatoren

Operatoren

CodeValue Syntax Kommentar
and
exp1 and exp2
Logische and-Verknüpfung zweier Wahrheitswerte.
Sind beide Wahrheitswerte true, ist das Ergebnis true, sonst false.
or
exp1 or exp2
Logische or-Verknüpfung zweier Wahrheitswerte.
Ist mindestens einer der beiden Wahrheitswerte true, ist das Ergebnis true, sonst false.
not
not exp
Negiert die logische Expression.
like
str like pattern
Prüft ob der String dem Pattern entspricht. Innerhalb des Patterns können '*' und '?' als Platzhalter benutzt werden. Für das Escaping kann '\' benutzt werden.
notlike
str notlike pattern
Prüft ob der String dem Pattern nicht entspricht. Innerhalb des Patterns können '*' und '?' als Platzhalter benutzt werden. Für das Escaping kann '\' benutzt werden.
<
var1 < var2
Vergleichsoperator "kleiner als".
<=
var1 <= var2
Vergleichsoperator "kleiner gleich".
=
var1 = var2
Vergleichsoperator "gleich".
>=
var1 >= var2
Vergleichsoperator "grösser gleich".
>
var1 > var2
Vergleichsoperator "grösser als".
<>
var1 <> var2
Vergleichsoperator "ungleich".
+
var1 + var2
Für numerische Werte: Addition.
Für Strings: Zusammensetzen/Verketten der Strings.
-
number1 - number2
Subtraktion
*
number1 * number2
Multiplikation
/
number1 / number2
Division

Query-Konstanten

Konstanten

CodeValue Syntax Kommentar
NULL
NULL
Konstante für NULL. In unseren Daten sind keine persistenten NULL-Werte enthalten. NULL-Werte können aber durch Query-Relations entstehen. Beispielsweise dann, wenn für die Relation 'keine Row vorhanden' ist.
Beispiel: Nicht jeder Adresse (Addr) ist zwingend ein Adresskreis (AddrCircle) zugeordnet.
TRUE
TRUE
Konstante für "Wahr": 1
FALSE
FALSE
Konstante für "Falsch": 0
EMPTY_DATE
EMPTY_DATE
Konstante für ein leeres Datum.
Innerhalb der SQL-Datenbank mit dem Wert 01/01/0001 gespeichert.