Для доступа к версионным данным можно выполнять запросы SQL SELECT к версионным представлениям.
Чтение из версии Default
При выполнении запросов SQL к версии Default у вас есть две опции: вы можете обращаться к последней версии или к заданному состоянию.
Чтение последнего состояния версии Default
Версионные представления автоматически получают доступ к текущему состоянию версии Default. Если вы выполняете запросы SELECT к версионному представлению, оно будет обращаться к текущему состоянию Default на момент выполнения запроса. Если другие пользователи вносят изменения в версию Default (тем самым изменяя состояние, на которое ссылается версия Default), последующие запросы будут адресованы к последнему по времени состоянию с соответствующими изменениями.
Чтение определенного состояния версии
Если вы хотите выполнить запрос к определенному состоянию версии Default, и не хотите, чтобы состояние изменилось во время выполнения запроса, выполните утилиту version_util.set_current_version. Эта процедура проверяет имя версии и задает соответствующее состояние базы данных. Если вы выполняете version_util.set_current_version к версии Default, запросы к Default всегда будут обращаться к тому состоянию, в котором находилась версия при начале выполнения утилиты version_util.set_current_version.
Утилиту version_util.set_current_version можно выполнить непосредственно из клиента SQL. Синтаксис выглядит так:
EXEC sde.version_util.set_current_version('<version_name>')
- Убедитесь, что для версионного класса объектов или таблицы, к которой вы обращаетесь, имеется версионное представление.
Начиная с ArcGIS 10.1, версионные представления создаются автоматически для всех версионных данных. Если данные были зарегистрированы как версионные в ПО, выпущенном ранее версии 10.1, вы можете создать версионное представление, щелкнув набор данных в дереве Каталога или в ArcMap правой кнопкой мыши и выбрав Управление, Включить SQL-доступ.
- В командной строке SQL выполните утилиту version_util.set_current_version, чтобы задать версию Default.
EXEC sde.version_util.set_current_version('DEFAULT')
- Выполнение выражения SELECT к версионному представлению для чтения версионных данных из базы геоданных.
В этом примере версионное представление называется sightings_ev.
SELECT ID, SPECIES, REPORTER FROM SIGHTINGS_EV WHERE REPORTER = 'CHUCK';
Чтение из версии, отличной от Default
Вы также можете выполнить утилиту sde.version_util.set_current_version для запроса к версии, отличной от Default. Эта утилита проверяет имя указанной версии и задает соответствующее внутреннее состояние версии. Запросы к версии, которые вы выполняете, всегда указывают на состояние, полученное при выполнении sde.version_util.set_current_version.
Эту утилиту можно вызвать снова, чтобы переключиться на другие версии, также ее можно вызывать каждый раз при обновлении рабочей области, чтобы возвращать текущее состояние версионной таблицы вызывающему приложению.
В следующих пошаговых инструкциях показано, как запустить version_util.set_current_version для запроса к версии, отличающейся от Default:
- Убедитесь, что для версионного класса объектов или таблицы, к которой вы обращаетесь, имеется версионное представление.
Версионные представления создаются при регистрации таблицы, класса объектов или набора классов в качестве версионных. Если данные были сделаны версионными до ArcGIS 10.1, вы можете создать версионное представление, щелкнув набор данных правой кнопкой мыши, выбрав Управление и Включить SQL-доступ.
- В командной строке SQL выполните утилиту version_util.set_current_version, чтобы задать версию, к которой будет создаваться запрос.
В данном примере для запросов выбирается версия FIELD_INSPECTIONS в базе геоданных master sde. Если вы запускаете утилиту для версии в базе геоданных с пользовательской схемой, перед утилитой следует ввести имя владельца базы геоданных.
EXEC sde.version_util.set_current_version('FIELD_INSPECTIONS')
- Выполнение выражения SELECT к версионному представлению для чтения версионных данных из базы геоданных.
В этом примере версионное представление называется code_ev.
SELECT violationID,codenum,propowner,insp_date FROM code_ev WHERE zip = '99999';
Если необходимо вернуть запрос к текущему состоянию версии Default, выполните процедуру set_default.
CALL sde.version_util.set_default();