'''Data Language InterfaceOne''' (Data Language/I, DL/I, Data Language/InterfaceOne, Data Language/One <ref>{{cite web|url=http://www-03.ibm.com/servers/eserver/zseries/zvse/products/database.html#dli|archive-url=https://web.archive.org/web/20060321113510/http://www-03.ibm.com/servers/eserver/zseries/zvse/products/database.html#dli|url-status=dead|archive-date=March 21, 2006|title=IBM z/VSE Products and components|publisher=[[IBM]]|accessdate=2009-06-27}}</ref>) is the language system used to access [[International Business Machines|IBM]]’s's [[IBM Information Management System|IMS]] [[database]]s, and its [[data communication]] system.
It is implemented from anymany languagelanguages by making calls to a software stub, DFSLI000. This stub has entry points to handle a variety of programming languages, e.g., calling CBLTDLI from a [[COBOL]] program. This stub is linked to the calling program, passes on the request to the IMS system, and returns the results and a status code.
In any full-function IMS database, the smallest element that can be retrieved is a ''segment''. Each segment is made up of ''fields'', one of which, typically, will be a key field. The segments are arranged hierarchically in the database, the highest -level segment type being a root segment. 255 different segment types, on up to 15 levels, are allowed in any database. A database ''record'' consists of a specific root segment and all its dependent child segments —{{snd}} there is no limit to the number of segments in a record, or to the number of records in a database (apart from the physical limitations of storage space).
The structure of any database is presented to the application program as a ''PCB'' (Program ControlCommunication Block), and this is used as one of the [[parameterParameter (computer programming)|parameters]]s passed to the stub. Other types of PCB are used to send and receive [[transaction processing]] messages, access and write to the user’s [[computer displaymonitor|VDU]] screen, and to print reports, etc.
When accessing a database segment, the application program also uses an ''SSA'' (Segment Search Argument) as a parameter, to specify the segment or segments that it needs. This would typically contain the segment type required, and the contents of any key fields.
For all languages except [[PL/I]], the first parameter in a call is the ''Function Code'' —{{snd}} a four -character field, examples being: “GU“<code>GU </code>” (Get Unique), “GN“<code>GN </code>” (Get Next), “REPL”“<code>REPL</code>” (Replace), and “ISRT”“<code>ISRT</code>” (Insert). With PL/I, due to the way this language does not mark the last parameter with a '1' in bit 0, the first parameter must instead be a fullword (Fixed Bin(31)) containing the number of following parameters.
A typical call from a [[COBOL]] program might be .<syntaxhighlight . .lang="cobolfree" inline>CALL “CBLTDLI” USING GU, Stores-Database-PCB, Stores-Segment-Area, Stores-Root-SSA</syntaxhighlight>. The program would then automatically wait till the requested data waswere retrieved and placed in the Segment-Area. The status code contained within the PCB would be updated with either blanks (if all went well) or some informational or error code.
A typical call from a PL/I program might be .<syntaxhighlight . .lang="cobolfree" inline>CALL PLITDLI(FOUR, GU, Stores-Database-PCB, Stores-Segment-Area, Stores-Root-SSA);</syntaxhighlight>.
==References==
{{reflistReflist}}
==External links==
* [http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp Information Management Software for z/OS Solutions Information Center]
* [http://publib.boulder.ibm.com/infocenter/iadthelp/v6r0/index.jsp?topic=/com.ibm.etools.egl.doc/topics/ceglasm0401.html Basic DL/I database concepts]
[[Category:Data-structured programming languages]]
[[Category:IBM software|Data Language One ]]
[[es:Data Language/Interface]]
[[it:IBM Data Language One (DL/1)]]
[[ja:DL/I]]
|