我如何在 LKM ODI12c(oracle 数据集成器)中通过 getcollist() 方法订购表达式

How could i order expression by getcollist() method in LKM ODI12c (oracle data integrator)

在LKM, 我使用 <%=odiRef.getTargetColList("\n", "[COL_NAME]", ",\n", "\n")%> 表达式来获取目标列,但列名称的顺序与源 table 相同。 例如:

Source table columns: Name, Surname, Age
Target table columns: Surname, Name, Age

LKM: <%=odiRef.getTargetColList("\n", "[COL_NAME]", ",\n", "\n")%>

---> Name, Surname, Age

期望的输出

---->Surname, Name, Age

如何按目标顺序获取目标列 table(姓氏、姓名、年龄)

谢谢。

您需要了解以下几点:

  • 当您在 LKM 中使用任何 odiRef 表达式时,它会像在源代码中一样生成 columns/structures,因为 LKM 在源代码之上工作;
  • 当您在 IKM 中使用任何 odiRef 表达式时,它可以生成 columns/structures 作为源或目标;

麦贝通过下图,你对以上两点比较了解了:

对于您的问题,您可以执行以下操作:

  • 在 IKM 映射开始声明 <%=odiRef.getTargetColList("\n", "[COL_NAME]", ",\n", "\n")%>;
  • 在 LKM 中(任何部分,但没有映射开始)使用 IKM 中声明的变量。

因此,换句话说,您可以在 IKM 中生成该列,然后在 LKM 中使用它。

这个可以做到,因为执行顺序是下一个:

  • 所有 KM 都有部分:映射开始、执行单元开始、执行单元主要、执行单元结束、映射结束;
  • 此部分的每个部分都按以下顺序执行:映射从 LKM 开始,然后映射从 IKM 开始,然后执行单元从 LKM 开始,然后映射从 IKM 开始,依此类推。
  • 每个 KM 的最后一部分 - 映射清理 - 如上所述执行,但前提是映射 > 物理 > 检查“出错时删除临时对象”