currentSchema (EGL-Systemvariable)
Wenn Sie die Builddeskriptoroption 'useCurrentSchema' auf YES setzen, fügt EGL die Systemvariable 'sqlLib.currentSchema' zu bestimmten Tabellennamen im generierten SQL-Code hinzu. Auf diese Weise können Sie nicht qualifizierte Tabellennamen in EGL-Datensatzeigenschaften und #sql-Direktiven verwenden und die Qualifizierung zur Laufzeit bereitstellen.
- Die Generierung muss für die Java™-Umgebung erfolgen, oder die Ausführung muss im EGL-Debugger erfolgen (siehe 'Verwendung im Debugger' weiter unten in diesem Thema).
- In der EGL-E/A-Anweisung muss ein EGL-SQL-Datensatz (SQLRecord) angegeben werden. Die Eigenschaften 'tableNames' und 'tableNameVariables' des Datensatzes geben die Tabellennamen an, die qualifiziert werden müssen.
- EGL stellt die Variable 'sqlLib.currentSchema' nicht in eine von EGL erstellte SQL-Anweisung 'prepare'.
EGL kann nicht ermitteln, wo die Tabellennamen in dem von Ihnen vorbereiteten Zeichenfolgeausdruck auftreten werden. Sie können die Variable jedoch
selbst einschließen, wie im folgenden Beispiel:
prepare p from "DELETE FROM " :: sqlLib.currentSchema :: "MYTBL"; - Sie müssen die Builddeskriptoroption 'useCurrentSchema' auf YES setzen.
EGL nimmt den Anfangswert Anfangswert von 'sqlLib.currentSchema' aus der Java-Laufzeiteigenschaft 'vgj.jdbc.schema'. Die Eigenschaft 'vgj.jdbc.schema' wiederum nimmt ihren Wert aus der Builddeskriptoroption 'sqlSchema' (wenn die Builddeskriptoroption 'genProperties' auf PROGRAM oder GLOBAL gesetzt ist).
Schließen Sie alle Trennzeichen in die Variablenzeichenfolge ein. Siehe hierzu die Beispiele weiter unten in diesem Thema.
Verwendung im Debugger
Auf Hostsystemen können Sie normalerweise nicht qualifizierte Tabellennamen verwenden und das Schema - je nach System - unterschiedlich festlegen. Unter iSystem können Sie die Tabelle auffinden, indem Sie die Bibliotheksliste nach einer Bibliothek (bei der es sich um das Schema handelt) durchsuchen, die die benannte Tabelle enthält. Unter z/OS wird das Schema gewöhnlich zur Bindezeit festgelegt, indem die Option QUALIFIER mit dem entsprechenden Schemanamen in die Anweisung BIND eingeschlossen wird. Sie können diese Vorgehensweise in EGL simulieren, indem Sie die Builddeskriptoroption 'useCurrentSchema' auf YES setzen und die Builddeskriptoroption 'sqlSchema' auf den Namen des Testschemas setzen, das Sie für das Debugging verwenden. Dies bedeutet, dass Sie COBOL-Code aus denselben SQL-Anweisungen generieren können, die Sie im EGL-Debugger getestet haben.
Ein zweiter Vorteil liegt darin, dass Entwickler Ihren Code üblicherweise anhand eines Schemas (oder einer ganzen Datenbank) testen, das Sie ausschließlich für Testzwecke verwenden. Bei Verwendung der Variablen 'sqlLib.currentSchema' brauchen Sie erst dann auf Ihre echten Daten zuzugreifen, nachdem Sie alle Tests abgeschlossen haben. Anschließend können Sie einfach den Wert der Builddeskriptoroption 'sqlSchema' ändern und Ihren Code neu generieren, ohne SQL-Änderungen vornehmen zu müssen.
Beispiel
Im folgenden Beispiel sind in verschiedenen Umgebungen unterschiedliche Formate für Schemas erforderlich.
if(sysVar.systemType is ZOSCICS)
// hier ist die Variable ein Schema
sqlLib.currentSchema = "TESTSCHEMA.";
else
if(sysVar.systemType is ISERIESJ)
// hier ist es eine Benutzerbibliothek
sqlLib.currentSchema = "TESTSCHEMA/";
end
end