Data Language One (Data Language/I, DL/I, Data Language/One, Data Language/One [1] ) — языковая система, используемая для доступа к базам данных IMS компании IBM и ее системе передачи данных.
Он реализуется из многих языков путем вызовов программного заглушки DFSLI000. Эта заглушка имеет точки входа для обработки различных языков программирования, например, вызов CBLTDLI из программы COBOL . Эта заглушка связана с вызывающей программой, передает запрос в систему IMS и возвращает результаты и код состояния.
В любой полнофункциональной базе данных IMS наименьшим элементом, который может быть извлечен, является сегмент . Каждый сегмент состоит из полей , одно из которых, как правило, является ключевым полем. Сегменты организованы в базе данных иерархически, причем тип сегмента самого высокого уровня является корневым сегментом. В любой базе данных допускается 255 различных типов сегментов на 15 уровнях. Запись базы данных состоит из определенного корневого сегмента и всех его зависимых дочерних сегментов — нет ограничений на количество сегментов в записи или на количество записей в базе данных (кроме физических ограничений пространства для хранения).
Структура любой базы данных представляется прикладной программе как PCB (Program Communication Block), и это используется как один из параметров , передаваемых в заглушку. Другие типы PCB используются для отправки и получения сообщений обработки транзакций , доступа и записи на экран VDU пользователя , а также для печати отчетов и т. д.
При доступе к сегменту базы данных прикладная программа также использует SSA (аргумент поиска сегмента) в качестве параметра, чтобы указать сегмент или сегменты, которые ей нужны. Обычно это будет содержать требуемый тип сегмента и содержимое любых ключевых полей.
Для всех языков, кроме PL/I , первым параметром в вызове является код функции — четырехсимвольное поле, например: « GU
» (Get Unique), « GN
» (Get Next), « REPL
» (Replace) и « ISRT
» (Insert). В PL/I, из-за того, что этот язык не отмечает последний параметр «1» в бите 0, первый параметр должен быть полным словом (Fixed Bin(31)), содержащим количество следующих параметров.
Типичный вызов из программы COBOL может быть таким : . Затем программа автоматически будет ждать, пока запрошенные данные не будут извлечены и помещены в Segment-Area. Код состояния, содержащийся в печатной плате, будет обновлен либо пробелами (если все прошло хорошо), либо каким-либо информационным кодом или кодом ошибки.CALL “CBLTDLI” USING GU, Stores-Database-PCB, Stores-Segment-Area, Stores-Root-SSA
Типичный вызов из программы PL/I может быть таким : .CALL PLITDLI(FOUR, GU, Stores-Database-PCB, Stores-Segment-Area, Stores-Root-SSA);