Data Language One
# Data Language One

Data Language One, abbreviato in DL/I è il linguaggio utilizzato per accedere ai database IBM IMS, e ai suoi sistemi di scambio dei dati.

Viene implementato da un qualunque linguaggio di programmazione chiamando uno stub software, DFSLI000. Questo stub possiede delle interfacce per la gestione di svariati linguaggi di programmazione, ad esempio la chiamata CBLTDLI di un programma scritto in COBOL. Questo stub viene linkato al programma chiamante, passa la richiesta al sistema IMS e restituisce il risultato ed un codice di stato.

In qualunque database IMS, il più piccolo dato prelevabile è un segmento. Ogni segmento è costituito da campi, ognuno dei quali, tipicamente sarà una chiave. I segmenti sono disposti all'interno del database in una gerarchia, alla cima della quale si trova un segmento "radice". In ogni database sono consentiti 255 tipi diversi di segmento, su un massimo di 15 livelli. Un record di un database consiste in uno specifico segmento radice con tutti i segmenti figli da esso dipendenti — e non c'è alcun limite al numero dei segmenti che compongono un record in un database (escluse quelli fisici dello spazio di memorizzazione).

La struttura di un database viene presentata ad un programma applicativo come un PCB (Program Control Block, blocco di controllo del programma), che viene usato come uno dei parametri passati allo stub. Altri tipi di PCB vengono utilizzati per inviare e ricevere messaggi riguardanti una transazione, per aver accesso e scrivere sul monitor dell'utente, per stampare report, ed altro ancora.

Quando detto programma ha accesso ad un segmento del database viene utilizzato come parametro anche un SSA (Segment Search Argument, argomento di ricerca del segmento), in modo da specificare quali segmenti sono necessari. Usualmente, un SSA contiene il tipo di segmento richiesto, e il contenuto di una qualunque chiave.

Il primo parametro di una chiamata è Function Code — un campo di quattro caratteri, ad esempio: "GU ” (Get Unique, preleva valore univoco), “GN ” (Get Next, preleva il valore successivo), “REPL” (Replace, sostituisci), ed “ISRT” (Insert, inserisci).

Una tipica chiamata di un programma COBOL Potrebbe essere CALL “CBLTDLI” USING GU, Stores-Database-PCB, Stores-Segment-Area, Stores-Root-SSA. Il programma attenderebbe quindi automaticamente finché il dato richiesto non venga restituito, e posto nella Segment Area. Il codice di stato contenuto all'interno del PCB verrebbe aggiornato con caratteri segnaposto (se tutto è andato bene) o con qualche codice d'errore o messaggio informativo.

