Приветствую.
При подготовке сообщений в блог начальная идея иногда трансформируется в нечто совершенно другое. Более того, иногда, изучив документацию и примеры - понимаешь, что некоторые вещи, которые раньше делал, делал понимая не до конца, хотя и с правильными результатами.
Я планировал рассказать о двух методах для получения имен таблиц БД в процедурах. Эти методы отличаются от методов, которые используются в модулях знаний, так как модули знаний обычно применяются в интерфейсах, а, значит, можно пользоваться такими понятиями (и связанными с ними методами подстановки), как целевая таблица, или таблицы источники данных.
Методы подстановки, о которых идет речь ниже, могут быть использованы как в процедурах, так и в модулях знаний, при необходимости. Например, если во всех модулях знаний использовать некоторую общую таблицу, которая явным образом не включается в интерфейс ODI, обратиться к этой таблице (получить ее полное имя) можно описанными ниже способами.
1. Используем метод подстановки getObjectName()
Документация пишет об этом методе следующее:
Форматы вызова:
- getObjectName(pMode, pObjectName, pLocation)
- getObjectName(pMode, pObjectName, pLogicalSchemaName, pLocation)
- getObjectName(pMode, pObjectName, pLogicalSchemaName, pContextName, pLocation)
- getObjectName(pObjectName, pLocation)
- getObjectName(pObjectName)
Все параметры строкового типа, возвращается тоже строка.
Возвращает полное наименование физического объекта, включая его сервер и схему. Параметр pMode определяет тип маски для подстановки в полное имя.
Параметр
|
Описание
|
pMode
|
"L" - использовать локальный тип маски для построения имени объекта.
"R" - использовать удаленный тип маски.
|
pObjectName
|
Строка, представляющая действительное имя ресурса (например, таблицу или файл). Имя объекта может предваряться кодом префикса, который будет заменен во время выполнения реальным значением, установленным для физической схемы.
|
pLogicalSchemaName
|
Наименование логической схемы для объекта.
|
pContextName
|
Наименование контекста для объекта.
|
pLocation
|
"W" - Возвращает полное имя для объекта размещаемого во временной БД для физической схемы для заданных логической схемы и контекста.
"D" - Возвращает полное имя для объекта размещаемого в БД данных для физической схемы и для заданных логической схемы и контекста.
|
Небольшое пояснение к последнему параметру. При создании физической схемы в ODI задается две реальных БД. Одна - для данных, вторая - для создания временных таблиц, используемых при преобразованиях. Подробнее на странице инсталляции.
Префиксы
С помощью описанных ниже кодов, можно к имени объекта добавить некоторые префиксы, чтобы сгенерировать имена для временных объектов (временные таблицы с ошибочными строками, триггеры журнализации и т.п.).
Код
|
Описание
|
%INT_PRF
|
Префикс для временных таблиц интеграции (по-умолчанию "I$_")
|
%COL_PRF
|
Префикс для временных таблиц загрузки (по-умолчанию "C$_")
|
%ERR_PRF
|
Префикс для таблиц с ошибочными строками(по-умолчанию "E$_")
|
%JRN_PRF_TAB
|
Префикс для временных таблиц журнализации (по-умолчанию "J$_")
|
%INT_PRF_VIE
|
Префикс для временных представлений журнализации (по-умолчанию "JV$_")
|
%INT_PRF_TRG
|
Префикс для триггеров журнализации (по-умолчанию "T$_")
|
Временные объекты обычно создаются во временной БД для физической схемы. Таким образом, для создания или обращения ко временному объекту необходимо указывать значение параметра pLocation равным W.
Примеры
Код
|
Результат
|
<%=odiRef.getObjectName("L", "SNP_ACTION", "MASTER-REP", "DEV", "W")%>
|
tempdb.dbo.SNP_ACTION
|
<%=odiRef.getObjectName("L", "SNP_DATA", "MASTER-REP", "DEV", "D")%>
|
db_snpm.dbo.SNP_DATA
|
<%=odiRef.getObjectName("R", "%ERR_PRFSNP_HOST", "MASTER-REP", "DEV", "W")%>
|
.tempdb.dbo.E$_SNP_HOST
|
<%=odiRef.getObjectName("R", "SNP_LINK", "MASTER-REP", "DEV", "D")%>
|
.db_snpm.dbo.SNP_LINK
|
Этот пример и примеры ниже взяты из инсталляции ODI на MS SQL Server, и выглядит физическая схема так:
Второй способ - получить наименование БД (или схемы) и добавить к нему имя таблицы.
2a. Используем метод подстановки getSchemaName()
Форматы вызова:
Все параметры строкового типа, возвращается тоже строка.
Возвращает физическое имя для временной БД или БД данных для заданной логической схемы.
Параметр
|
Описание
|
pLogicalSchemaName
|
Наименование логической схемы для объекта.
|
pContextCode
|
Наименование контекста для объекта.
|
pLocation
|
"W" - Возвращает имя временной БД физической схемы соответствующей паре контекст - логическая схема.
"D" - Возвращает имя БД данных физической схемы соответствующей паре контекст - логическая схема.
|
Примеры
Код
|
Результат
|
<%=odiRef.getSchemaName("MASTER-REP", "W")%>.SNP_ACTION
|
dbo.SNP_ACTION
|
<%=odiRef.getSchemaName("MASTER-REP", "DEV", "D")%>.SNP_DATA
|
dbo.SNP_DATA
|
<%=odiRef.getSchemaName("W")%>.SNP_HOST
|
dbo.SNP_HOST
|
<%=odiRef.getSchemaName()%>.SNP_LINK
|
dbo.SNP_LINK
|
2б. Используем метод подстановки getCatalogName()
Форматы вызова и параметры те же, что и для метода getSchemaName.
Примеры
Код
|
Результат
|
<%=odiRef.getCatalogName("MASTER-REP", "W")%>.SNP_ACTION
|
tempdb.SNP_ACTION
|
<%=odiRef.getCatalogName("MASTER-REP", "DEV", "D")%>.SNP_DATA
|
db_snpm.SNP_DATA
|
<%=odiRef.getCatalogName("W")%>.SNP_HOST
|
tempdb.SNP_HOST
|
<%=odiRef.getCatalogName()%>.SNP_LINK
|
db_snpm.SNP_LINK
|
Использование getCatalogName или getSchemaName применимо для тех СУБД, где полный путь к таблицам или другим объектам кодируется только через 2 параметра: наименование БД и объекта.
Обратите также внимание на то, что необходимо выбрать физическую схему по-умолчанию при наличии нескольких физических схем для одного дата сервера для корректной работы некоторых стандартных модулей знаний и метода getObjectName с параметром pMode = "R"
< Предыдущая | Следующая > |
---|