0

Loading Knowledge Module(LKM)を使用してOracleで監査テーブルを作成する必要があります。

ナレッジモジュールは通常、動的に名前が付けられたさまざまなテーブル、トリガー、およびビューを作成します。たとえば、C $ _tablename、J $ _tablename、T $ _tablename、JV$_tablenameなどです。

監査テーブルに対して同様のことをしたいと思います。つまり、すべての監査テーブルは「tablename_audit」と呼ばれますが、LKMコードでこれを設定する方法はありません。

例として、次のLKMコードを使用してC$作業テーブルを作成します。

create table <%=odiRef.getTable("L", "COLL_NAME", "A")%>
(
    <%=odiRef.getColList("", "[CX_COL_NAME]\t[DEST_WRI_DT] NULL", ",\n\t", "","")%>
)

そして、次のIKMコードはI$フローテーブルを作成します。

create table <%=odiRef.getTable("L", "INT_NAME", "W")%>
(
    <%=odiRef.getColList("", "[COL_NAME]\t[DEST_WRI_DT] NULL", ",\n\t", "", "")%>
    ,IND_UPDATE     char(1)
)

INT_NAMEとCOLL_NAMEは、ここで指定されているように、SubstitutionAPIで定義されている定数のようです。

では、ナレッジモジュールを使用して、Oracleデータベースに動的な名前を持つ同様のテーブルを作成するにはどうすればよいですか?

ありがとうございました。

4

2 に答える 2

0

私はこれを次のように解決することができました。

<%=odiRef.getTable("L", "TARG_NAME", "A")%>ターゲット テーブル名を DATABASE."tablename" 形式で返します。

したがって、次のように、Jython を使用して DATABASE."tablename" 文字列からテーブル名を抽出し、テーブル名に "_audit" を追加してから、DATABASE."tablename_audit" 文字列を Jython 変数に保存する手順を LKM に追加しました。下。

targTableName = '<%=odiRef.getTable("L", "TARG_NAME", "A")%>'
splitStr = targTableName.split('"')
JYTHON_AUDIT_TABLE = splitStr[0] + '\"' + splitStr[1] + '_audit\"'

ただし、Jython変数はODIのSQLスクリプトから使用できないため、 ODI Expertの Jython to Java APIを使用して、Jython変数をJava変数(ODIオブジェクトで使用可能)にフェッチする別のステップをLKMに追加しました。

import api.getInfo as info;

info.setJythonVariable(JYTHON_AUDIT_TABLE);

<@
import api.getInfo;
String JAVA_AUDIT_TABLE = getInfo.getJythonVariable();
@>

JAVA_AUDIT_TABLEその後、SQL スクリプトで変数を簡単に使用して、ターゲット データベースに必要なテーブルを作成できます。

create table <@=JAVA_AUDIT_TABLE@>...

insert into <@=JAVA_AUDIT_TABLE@>...
于 2013-01-11T11:12:18.933 に答える