DL/I (Data Language/One) wurde in den 1960er Jahren von IBM® als hierarchisches Datenbankmanagementsystem entwickelt.
DL/I ist auch heute noch bei COBOL-Programmen ein weitverbreitetes Datenbanksystem.
Die folgenden Begriffe und Konzepte sind beim Entwickeln eines DL/I-Datenbankprogramms am wichtigsten:
- Segmente
- Segmente sind die Haupteinheit für Daten in einer DL/I-Datenbank. Segmente sind mit Datensätzen vergleichbar. Es handelt sich dabei um einzelne Blöcke von Daten, die in Datenfelder aufgeteilt wurden.
- Datenbankhierarchie
- Eine einzelne Datenbank kann mehrere Segmenttypen enthalten. Diese Segmente werden in einer hierarchischen Beziehung (Top-down) angeordnet. Das Segment an der Spitze der Hierarchie wird als Stammsegment bezeichnet. Jedes Segment kann mehrere verwandte abhängige Segmente in einer niedrigeren Ebene der Hierarchie besitzen. Ein Segment mit einem abhängigen Segment wird als übergeordnetes Segment des abhängigen Segments bezeichnet. Das abhängige Segment wird als untergeordnetes Segment bezeichnet. Jedes Segment in der Datenbank (Stammsegmente ausgenommen) besitzt genau ein übergeordnetes Segment. Das Stammsegment besitzt kein übergeordnetes Segment.
- Folgefelder
- Bei jedem Segmenttyp in einer Datenbank kann eines dessen Felder als Folgefeld bestimmt werden. Durch den Wert eines Folgefeldes wird die Reihenfolge bestimmt, in der die Segmente gespeichert und von der Datenbank abgerufen werden.
Wenn in einem übergeordneten Segment mehrere Vorkommen desselben Typs des untergeordneten Segments vorkommen und ein Folgefeld für das untergeordnete Segment definiert ist, werden diese untergeordneten Segmente in DL/I in der Folgefeldreihenfolge unter diesem übergeordneten Segment gespeichert.
- PSB (Program Specification Block = Programmspezifikationsblock)
- Ein PSB ist eine formale DL/I-Beschreibung der hierarchischen Datenbankstrukturen, auf die ein Programm zugreifen kann. EGL-Datensatzabschnitte des Typs 'PSBRecord' enthalten die Informationen, die für Ihr Programm zum Interagieren mit dem DL/I-PSB erforderlich sind. Mit dem PSB werden die hierarchischen Beziehungen dargestellt, die zwischen den Segmenttypen vorhanden sind. Weitere Informationen finden Sie im Kapitel Datenzugriff mithilfe von PSBs und PCBs in der EGL-Sprachreferenz.
- PCB (Program Communication Block = Programmkommunikationsblock)
- Ein PCB ist ein Eintrag in einem PSB. Mit jedem Datenbank-PCB wird eine hierarchische Datenstruktur beschrieben, die von einem Programm verwendet werden kann. Die Datenstruktur kann direkt der Struktur einer physischen oder logischen DL/I-Datenbank entsprechen oder die Datenstruktur durch Zugreifen eines Sekundärindexes invertieren.
- DL/I-Aufrufe
- Ein DL/I-Aufruf ist ein Aufruf von DL/I durch ein Programm. Durch die für einen Datenbankaufruf übergebene Parameterliste wird DL/I mit den folgenden Informationen bereitgestellt:
- Funktionscode
- Gibt an, ob DL/I zum Abrufen, Einfügen, Ersetzen oder Löschen von Segmenten in bzw. aus der Datenbank verwendet wird.
- Datenbankkennungen
- Verweist bei DL/I-Aufrufen mithilfe von CBLTDLI auf den PCB (Program Communication Block = Programmkommunikationsblock), mit dem die Datenbank ermittelt wird, auf die in DL/I bei dem Aufruf zugegriffen werden soll. Stellt bei DL/I-Aufrufen mithilfe von AIBTDLI den Namen des PCBs im PSB bereit.
- E/A-Bereichsadressen
- Geben die Adressen des Puffers an, in dem das Segment nach dem Auslesen aus der Datenbank oder vor dem Schreiben in die Datenbank enthalten ist.
- SSA-Listen (Segment Search Argument = Segmentsuchargument)
- Listen eine Gruppe von Suchkriterien auf, mit denen in DL/I die Segmente ausgewählt werden können, die von der Datenbank abgerufen werden, oder mit denen die Position von Segmenten angegeben werden kann, die davon in die Datenbank eingefügt werden.
Wenn Sie ein DL/I-Programm in einer Sprache wie COBOL oder PL/I schreiben, codieren Sie entweder die DL/I-Parameterliste direkt oder Sie verwenden die Befehlsschnittstelle von CICS, um die DL/I-Parameterliste zu erstellen. In EGL werden DL/I-Parameterlisten basierend auf der E/A-Anweisung und der Position des DL/I-Segments im PCB für Sie erstellt. Sie können den DL/I-Aufruf anzeigen, der für die Funktion erstellt wurde.
Sie können den DL/I-Aufruf auch zum Verwenden zusätzlicher DL/I-Funktionen ändern.
- Datenbankpositionen
- Wenn ein Programm ausgeführt wird, wird in DL/I ein Positionsverweis für jeden PCB im Programm-PSB beibehalten. Mit dem Verweis wird die Stelle in der Datenbank angegeben, an der mithilfe einer GET NEXT-Anweisung die Suche nach einem abzurufenden Segment gestartet wird.
Der Positionsverweis wird auf einen beliebigen erfolgreichen DL/I-Aufruf festgelegt, um auf das Segment zu verweisen, das auf das letzte Segment folgt, auf das bei dem Aufruf zugegriffen wurde. Wenn keine Aufrufe durchgeführt wurden, wird durch die aktuelle Position der Start der Datenbank angezeigt. Wenn das Ende der Datenbankbedingung erfolgt, wird die aktuelle Position zum Start der Datenbank.
Wenn in DL/I das Durchsuchen einer Datenbank nach einem Segment, das den SSA-Listenkriterien entspricht, fortgesetzt wird, wird in DL/I in der Reihenfolge auf alle Stammsegmente zugegriffen, in der sie in der Datenbank erscheinen. Wenn in DL/I ein Stammsegment gefunden wird, wird damit auf alle abhängigen Segmente des Stammsegments zugegriffen, bevor das nächste Stammsegment durchsucht wird. Wenn in DL/I die abhängigen Segmente durchsucht werden, wird zuerst versucht, das nächste Segment in der nächstniedrigeren Ebene auszulesen. Wenn keine niedrigere Ebene vorhanden ist, wird das nächste Segment auf derselben Ebene ausgelesen. Wenn keine weiteren Segmente in der aktuellen Ebene vorhanden sind, wird die Suche nach dem nächsten Segment in der vorherigen Ebene fortgesetzt. Dieser Prozess wird als Suchreihenfolge 'Top to Bottom, Left to Right' bezeichnet.
Sie können EGL-Programme, die auf DL/I-Datenbanken zugreifen, mithilfe vieler derselben EGL-Anweisungen schreiben, die Sie zum Zugreifen auf eine relationale Datenbank verwenden würden: ADD, DELETE, GET und REPLACE. Wenn Ihre EGL-Anweisung eine Datensatzvariable basierend auf dem Stereotyp 'DLISegment' angibt, kann in EGL Code generiert werden, der mit einer DL/I-Datenbank kompatibel ist.
Wie bei SQL können Sie DL/I-Programme vollständig in EGL schreiben oder Sie können expliziten DL/I-Code angeben, um die Details besser steuern zu können.
In diesem Fall schreiben Sie DL/I-Pseudocode, der mithilfe von EGL in echte DL/I-Befehle übersetzt wird.
Ein Diagramm des Layouts einer Beispiel-DL/I-Datenbank finden Sie im Kapitel Beispiel-DL/I-Datenbank. Beispiellösungen für allgemeine DL/I-Codeprobleme finden Sie im Kapitel DL/I-Beispiele.