понедельник, 18 марта 2019 г.

Как указать базу данных для рутин и глобалов

В практических задачах бывает необходимо обратиться к глобалу или рутине размещенной в другой базе данных. Эта статья описывает как это выполняется на языке MUMPS.

В языке MUMPS действует соглашение, что если база данных рутины или глобала не указана явно, то используется текущая база данных процесса. Поэтому разные процессы находясь в разных базах данных но выполняя один и тот же код, обращаются к разным глобалам и рутинам. В случае если необходимо явно указать к какой базе данных следует обратиться, имя базы данных должно быть указано синтаксически перед именем глобала или рутины.

Прямое указание имени базы данных для глобала:
^|dbname|gloname(subscripts,...)
Прямое указание имени базы данных для рутины:
^|dbname|rouname(arguments,...)
Имя базы данных указывается как вычисляемое выражение. Выражение может быть указано произвольной сложности, может содержать константы, операторы, вызовы функций и косвенности. Пример использования константы для имени базы данных:
s val=^|"TEMP"|gloname(subscripts,...)
d ^|"TEMP"|rouname(arguments,...)
Пример использования выражения с операторами для имени базы данных:
s a="TE",b="MP"
s val=^|a_b|gloname(subscripts,...)
d ^|a_b|rouname(arguments,...)
Пример использования выражения с косвенностью для имени базы данных:
s curdb="TEMP"
s dbname=$na(curdb)
s val=^|@dbname|gloname(subscripts,...)
d ^|@dbname|rouname(arguments,...)
Если использовано явное указание имени базы данных, то процесс не выполняет переключение текущей базы данных в указанную для выполнения операции.

MiniM Database Server также поддерживает соглашение что если в качестве имени базы данных указана пустая строка, то обращение выполняется к текущей базе данных, что позволяет указывать текущую базу данных в случае применения косвенности или вычисляемых значений.

Также MiniM Database Server поддерживает устаревшую нотацию явного указания базы данных в квадратных скобках, что позволяет переносить ранее разработанные программы:
s val=^[dbname]gloname(subscripts,...)
d ^[dbname]rouname(arguments,...)
В случае необходимости указать метку и опционально смещение, имя базы данных для рутины указывается непосредственно перед именем рутины:
d label+offset^|dbname|rouname
При указании имени базы данных как вычисляемого выражения содержащего побочные действия надо понимать, что все значения вычисляются в порядке слева направо.

Комментариев нет:

Отправить комментарий