Список таблиц для выборки |
<список-таблиц-для-выборки> = from <элемент-списка-from> {, <элемент-списка-from> }
<элемент-списка-from> = <вложенный-запрос> | <join-соединение-таблиц> | <таблица-для-выборки> | <синоним-таблицы>
<вложенный-запрос> - см. раздел "Вложенный запрос. ".
<join-соединение-таблиц> - см. раздел "Конструкция join. ". Конструкция join доступна начиная с Атлантис 5.1.34.
<таблица-для-выборки> - физическая таблица, участвующая в данной выборке (логической таблице).
Таблицы могут быть включены в выборку не только через список таблиц, но и прямым указанием имени таблицы перед именем поля (или перед звездой *) в разделе "Список элементов выборки. ".
<таблица-для-выборки> = [table | objref] <имя-таблицы> [ <заголовок-таблицы> ] [ (<атрибут-таблицы> {, <атрибут-таблицы> }) ]
Ключевое слово table указывает на то, что должна в обязательном порядке использоваться таблица. Если эта таблица не из текущего компонента, то выдается сообщение об ошибке "Таблица <имя-таблицы> принадлежит компоненту <имя-компонента>, текущий компилируемый компонет <имя-компонента>".
Ключевое слово objref указывает на то, что в обязательном порядке должна использоваться ссылка на объект. Если такого объектного типа нет, то выдается сообщение об ошибке "Таблица <имя-таблицы> отсутствует в словаре". Если есть и объектный тип и таблица из этого компонента то выдается предупреждение "Таблица <имя-таблицы> принадлежит текущему компоненту, однако используем объектный враппер".
Пример:
select : from table KatOrg, objref KatMol;
Список атрибутов таблицы заключается в скобки. Атрибуты в списке разделяются запятой.
<атрибут-таблицы> = <имя-индекса> | readonly | accelerate | temp | open | build | exclusive
<имя-индекса> - задает явно имя индекса, по которому будет открываться таблица. Если индекс не задан, то компилятор ищет наиболее подходящий из существующих индексов данной таблицы (обычно выбирается минимальный по длине из подходящих по структуре).
readonly - режим открытия таблицы только на чтение. При попытке записи в такую таблицу выдается сообщение "Отказ на доступ".
accelerate - режим ускоренного доступа к таблице. Не гарантирует сохранности данных при сбоях различного вида. Режим очень удобен для формирования расчетных таблиц.
temp - режим открытия временного файла. При закрытии таблицы, открытой в режиме temp, файл с данными удаляется.
exclusive - исключительный режим открытия таблицы. Этот режим позволяет предоставить рабочей станции "исключительный" доступ, что означает, что другая станция не сможет открыть файл до тех пор, пока станция, осуществляющая "исключительный" доступ, не закроет его. Режим имеет смысл только для файлов, расположенных на сетевом диске. Если Вы затребуете этот режим для файла на локальном диске, СУБД откроет файл в нормальном режиме. Таблицы, для которых используется данный режим, должны быть перечислены в системном конфигурационном файле:
[DATABASE] ExclusiveTables = <имя таблицы>;
build - режим открытия временной таблицы. Если файл существовал, то он очищается перед открытием.
open - режим открытия таблицы при условии, что она уже существует. Если файл не был ранее создан, то он не будет открыт. Используется только для Btrieve.
<синоним-таблицы> - синоним таблицы. Синоним служит для повторного открытия одной и той же таблицы.
<синоним-таблицы> = [table | objref] [synonym] <имя-таблицы> <имя-синонима> [ <заголовок-синонима> ] [ (<атрибут-таблицы> {, <атрибут-таблицы> }) ]
Начиная с Атлантис 5.1.36 можно описать синоним на свойство типа objInterface. ObjInterface должен иметь хотя бы один объектный индекс. Оператор getFirst where не поддерживается. Для синонима на свойство типа objInterface ключевое слово synonym указывать обязательно.
Пример:
objInterface ISpecification; property id : comp; property count : double; property price : double; index byId = Id(unique); end; objInterface IInvoice; property sum : double; property specification : ISpecification read; end; interface test; var lInvoice : IInvoice(vInvoice) new; create view as select * from synonym lInvoice.Specification l_spec; browse br1; show at (,11); table l_spec; fields l_spec.price; l_spec.count; end; end.
В примере из таблицы сотрудников для каждого отдела выбираются:
сотрудники, работающие в этом отделе (Employee);
руководитель отдела (синоним для Employee - Bosses).
select Department.name, Employee.name, Bosses.name from Department(byname),Employee(readonly), synonym Employee Bosses(readonly) where (( Department.code == Employee.depCode and Department.boss == Bosses.code ));
Конструкция join доступна начиная с Атлантис 5.1.34.
Синоним на свойство типа objInterface можно описать начиная с Атлантис 5.1.36.