Virtabs: User-SQL

USER-SQL - eigene Implementierung der Virtab-View und/oder der stored procedures

Die Hauptaufgabe von ER2SQL ist die erzeugung von SQL-Code für die Virtav-View und die stored procedures für INSERT, UPDATE und DELETE.
In besonderen Fällen kann es nötig sein, diese Codeblöcke ganz oder teilweise selber zu implementieren. Dies ist mit folgenden Anweisungen möglich:

VIRTUALTABLE virtabname...
[ COLUMN columname1 DATATYPE datatype1 ]
[ COLUMN columname2 DATATYPE datatype2 ]
...
[ ONSELECT [ database ] BEGINSQL select-statement... ENDSQL ]
[ ONINSERT [ database ] BEGINSQL procedure-body ENDSQL ]
[ ONUPDATE [ database ] BEGINSQL procedure-body ENDSQL ]
[ ONDELETE [ database ] BEGINSQL procedure-body ENDSQL ]
 

Die “COLUMN .. DATATYPE”-Anweisungen bilden “leere Spaltendeklarationen”. Sie definieren, welche Spalten durch das eigene SQL implementiert werden soll. Diese Deklarationen sind nur nötig, wenn COLUMNs nicht auf die reguläre Art deklariert werden können.

Mit “ONSELECT” wird das Select-Statement angegeben, das als Virtab-View verwendet wird.

Mit “ONINSERT”, “ONUPDATE” und/oder “ONDELETE” wird PL/SQL-Code angegeben, der den Kern der entsprechenden stored procedures bildet. “procedure-body” hat die Form

DECLARE
  variable declarations
  ...
BEGIN
  ...
  procedure code
  ...
END

Die Proceduredefinition samt Parametern erzeugt ER2SQl aus den Spalten, die durch COLUMN-Anweisungen definiert wurden. Ebenfalls kann der PL/SQL auf V_*-Variable zugrückgreifen, die die Procedure-Parameter enthalten.


ONSELECT / ONINSERT / ONUPDATE / ONDELETE kann für normale Virtabs             unabhängig voneinander angegeben werden, um nur bestimmte Code-Teile selbst                   zu implementieren.

User-SQL kann in zwei verschiedenen Szenarien eingesetzt werden:

Bestehende Virtabs mit eigenem SQL-Code verbessern

Wenn man das SQL für eine bestehende Virtab ganz oder teilweise ändern möchte, wird die Virtab zu nächst ganz normal definiert. Die “COLUMN” DATATYPE” -Anweisungen wird nicht benutzt, die Spalten der Virtab werden wie gehabt definiert.
Mit ONSELECT/UNINSERT/ONUPDATE/UNDELETE können dann gezielt bestimmte Code-Teile neu definiert werden.
Sollen optimierte Varianten bestehender Virtabs erzeugt werden, kann auch die MODIFIES oder USES-Anweisungen zum Erben von Virtandefinitonen eingesetzt werden. Beispiel:

VIRTUALTABLE myvirtab
  TABLE t1 ...
  TABLE t2 ...
 COLUMN col1 = ...
 COLUMN col2 = ...
;

VIRTUALTABLE my_optimized_virtab USES myvirtab
 ONUPDATE BEGINSQL
   SELECT col1,col2 from t1,t2 WHERE ....
ENDSQL
;

 

Erzeugen einer neuen Virtab durch User-SQL

Mit User SQL können auch Virtabs aus beliebigen Views und stored proceduren konstruiert werden. Es ist nicht nötig, dass sich die Funktionalität von View und procedures mit den reguläre Mitteln von ER2SQL formulieren lässt!
In diesem Fall muss allerdings angegeben werden, welche Spalten die neue Virtab enthält. Die Spaltendefinitionen müssen bekannt sein, damit die procedure-Header und Delphi/Java-Interface Objekte erzeugt werden können. Die Spalten werden mit der COLUMN .. DATATYPE-Anweisung (leere Spaltendeklaration) definiert, sie haben keinerlei Bezug zu realen Datenbank-Tabellen.

Wenn in einer Virtab-Definition eine leere Spaltendeklaration vorkommt, kann ER2SQL dein Code für View und procedures nichtmehr erzeugen. Der nötige SQL-Code muss dann durch User-SQL angegeben werden.

  • Ist die Virtab NOCHANGE, muss ONSELECT angegeben sein, ONUPDATE .. ONDELETE sind nicht möglich.
  • Ist die Virtab schreib/lesefähig, müssen ONSELECT, ONINSERT, ONUPDATE und ONDELETE angegeben werden.Für verschiedene Zieldatenbanken kann verschiedener SQL-Code angegeben werden.

Datenbankenvarianten

ER2SQL kann Code für verschiedene Datenbank-Typen erstellen (ORACLE, postgresQL, MSSQL). Je nach Datenbanktyp  muss anderes SQL geschrieben werde, daher kann das User-SQL mehrfach angegeben werden und mit verschiedenen Datenbanktypen markiert werden.

[Konzepte] [Virtab-Prozeduren] [LINK, FOREIGNKEY] [QUERY: Mehrfachzugriffe] [USES und Verschmelzen] [Schreibschutz, -zwang] [Daten-Teilmengen] [Synthetische Spalten] [User-SQL]