0

使用 ODI 12C,我有一个包含 2 个主键组合的维度。我只想使用 auto-increment 执行业务密钥。

注意:-我不需要 SCD 行为

4

2 回答 2

0

我这样做了:

1 - 在数据库模式中创建序列(没有缓存)

2 - 在所需的映射中调用它:

    <%=odiRef.getObjectName("L", "SEQ_NAME", "D")%>.nextval

3 - 将映射设置为:

仅对插入有效,取消选中 NOT NULL 条件,EXCUTE ON HINT :TARGET

4 - 将 CKM 放到:CKM SQL

5 - 运行

于 2016-12-12T06:24:10.467 回答
0

您可以在项目或全局对象中创建序列。它有三种类型:

  • 标准序列,其中最后一个值将存储在存储库中,并且 ODI 将在每次检索值时递增它。
  • 具体顺序,和上面一样,只是你选择了值存储在哪个表的哪个模式中
  • 本机序列,仅使用底层数据库序列。这是最受欢迎的选择,因为它的性能会好很多。

然后,您可以使用:<SEQUENCE_NAME>_NEXTVAL. 对于本机序列,它将为每一行获得一个新值。对于标准或特定序列,它将为代理处理的每一行提供一个新值。因此,如果您进行逐行操作,它将为每一行赋予一个新值,但如果您进行批量操作,它将在任何地方使用相同的值。

您也可以使用它来调用它,#<SEQUENCE_NAME>_NEXTVAL但是在将 SQL 推送到数据库之前,这个只会被替换一次,因此所有行都将具有相同的值。

如果您在 Oracle 数据库上使用本机序列,则必须将Execute On Hint设置为Target,以便序列调用位于最外层选择中。

于 2016-12-12T09:42:16.573 回答