Virtabs:  VIRTUALTABLE (Einleitung)

Syntax der Virtab-Definitionen im Definitionsfile

In diesem Abschnitt werden die eigentlichen Virtabs definiert. Angegeben werden müssen:

  • Attribute, die sich auf die Virtab als Ganzes beziehen
  • Optional eine Liste mit Tabellen, über die der verbindende Graph im ER-Diagramm läuft, nebst evtl. QUERY-Zugehörigkeiten, FOREIGNKEY-Angaben und anderen Attributen (“TABLE”)
  • Die Spalten, die in der Virtab erscheinen sollen, sowie deren Attribute. (“COLUMN”)
  • Virtab-Constraints (“CONSTRAINT”)

Die Grundsyntax einer Virtab-Definition ist:

[ "CREATE" ] "VIRTUALTABLE" virtabname
   virtab_attribute
  [ "TABLE" table_name tabellen_attribute [ "END" ] ]
  [ "COLUMN" column_name spalten_attribute [ "END" ] ]
  [ "CONSTRAINT" constraint_definition [ "END" ] ]
  [ "USES" anderer_virtabname [ "PREFIX" objekt_prefix] ]
  [ ONSELECT [ database ] BEGINSQL select-statement ENDSQL ]
  [ ONINSERT [ database ] BEGINSQL procedure-body ENDSQL ]
  [ ONUPDATE [ database ] BEGINSQL procedure-body ENDSQL ]
  [ ONDELETE [ database ] BEGINSQL procedure-body ENDSQL ]

  ... mehr TABLE, COLUMN, CONSTRAINT, oder USES ...
 ";"

Das  Schlüsselwort “CREATE” ist optional. Die Anordnung der Definitionsblöcke TABLE, COLUMN, CONSTRAINT und USES  ist im Prinzip frei. Da aber Tabellen definiert werden müssen, ehe sie in “COLUMN”-Anweisungen angesprochen werden können, und “CONSTRAINT” Bedingungen auf defineirten Spalten setzt, ist obige Anordnung die vorherrschende. Da USES die TABLE, COLUMN- und CONSTRAINT-Anweisungen bereits definierte Virtabs integriert, kann es im Prinzip an jedem Ort stehen, es gelten aber besondere Einschränkungen (siehe Virtab-Modifikation)

virtab_attribute

...  sind in beliebiger Reihenfolge:

    [ "NOCHANGE" ]
    [ "MODIFIES basisvirtab_name ]
    [ "HINT" "ORA"| "MSSQL" hint_text ]
    [ "TABLEORDER" tablealias_liste ]
    [ "TABLEORDER FOR" tablealias ]
    [ "COLUMNORDER" spalten_liste ]
    [ "FEATURE" feature_name [ feature_argumente ] ]
    [ "FEATURE INFO" feature_name ]
    [ "INFO" info_text ]
    [ "VISIBLE" ]
    [ "INVISIBLE" ]
    [ "DISTINCT" ]
     

NOCHANGE

“NOCHANGE” bedeutete, das die Virtab keine Änderungen an Basistabellen durchführt. Es ist also nur die View-Definition benutzbar. Die Virtab-Prozeduren geben bei Aufruf eine Fehlermeldung aus.

MODIFIES

“MODIFIES” gibt an, dass intern eine Kopie der kompletten Definition von Virtab “basisvirtab_name” in die Virtab “virtabname” hineinkopiert wird, und zwar vor allen anderen Anweisungen. Diese geerbte Definition wird dann durch die folgenden Anweisungen modifiziert.

HINT

Mit “HINT ORA” kann ein Text angegeben werden, der in die View-Definition so eingebaut wird: “SELECT /*+ hint_text */ ...”. Dies reicht manuelle Optimierungen an das ORACLE-RDBMS durch. Ein mehrtägiges Studium des “Database Perforance Tuning Guide” wird empfohlen:-).
“HINT MSSQL” definiert einen Hint für den MS-SQLServer.

TABLEORDER

“TABLEORDER” gibt die Reihenfolge der Basistabellen in der FROM-Klausel der View-Definition an. Nicht gelistete Tabellen werden hinter allen angegeben angeordnet. Das ist sinnvoll als Ergänzung zu “HINT”.

“TABLEORDER FOR” erstellt automatisch eine Tabellenreihenfolge, die optimal ist, wenn ein Record aus “tablealias” durch eine Suchbedingung vorgegeben ist.

COLUMNORDER

“COLUMNORDER” gibt die Reihenfolge der Virtab-Spalten in der View und den Prozeduren vor, unabhängig von der Position ihrer Definition. Wenn für eine hier gelistete Spalte undefiniert ist, produziert ER2SQL einen Fehler.

FEATURE

Mit “FEATURE” werden besondere Zusatzfunktionen in View und Prozeduren eingebaut. Diese sind für spezielle projekt-abhängige Probleme in ER2SQL eingebaut, und für andere Nutzer nicht verwendbar.

Von allgemeinem Interesse sind:

“FEATURE IGNORE_ERROR fehlernummer [, fehlernummer ...]”
unterdrückt bestimmte Fehlermeldungen von ER2SQL beim Übersetzen der Virtab.

FEATURE INFO

Für eine Virtab können mit “FEATURE INFO” beliebige Attribute angegeben werden. Diese bewirken keine Zusatzfunktionen und  können von Applikationen über das Application-Interface mit “VTHasFeature()” abgefragt werden.
Auf diese Weise kann eine Virtab für einen bestimmten Verwendungszweck markiert werden.

INFO

“INFO” definiert einen Kommentar für die Virtab. Im SQL-Code für CREATE VIEW wird dieser Text als SQL-Kommentar mit ausgeben.

VISIBLE, INVISIBLE

“INVISIBLE” bestimmt, dass die Virtab nie erzeugt werden soll. Das ist für Pseudo-Virtabs sinnvoll, die nur intern als Bausteine anderer Virtabs verwendet werden (siehe “MODIFIES” und “USES”)

“VISIBLE” nimmt ein geerbtes “INVISIBLE” zurück.

DISTINCT

“DISTINCT” bewirkt in der Viewdefinition ein “SELECT DISTINCT”, d.h., es werden garantiert nur von einander verschiedene Zeilen geliefert.

ONSELECT, ONINSERT, ONUPDATE, ONDELETE

Mit diesen Anweisungen können bestimmte Teile des SQL-Codes für Views und/oder stored procedures selber angegeben werden. genauere Infos unter Konzepte.

 

[Referenz] [ER2SQL cmdline] [DB-Voraussetzungen] [Definitionsfile-Aufbau] [Syntax: TABLE und LINK] [Syntax: VIRTUALTABLE] [Syntax: TABLE] [Syntax: COLUMN] [Syntax: CONSTRAINT] [Syntax: USES, MODIFY, ...] [Fehler von ER2SQL] [Laufzeitfehler] [Syntax-Hervorhebung] [SQL-Objekt-Namen]