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.
|