ODI:KM Java BeanShell - 转义双引号

时间:2017-06-29 06:28:28

标签: oracle oracle-data-integrator

我想在知识模块的任务中设置一个变量,目标技术设置为Java BeanShell。该值表示映射EXPRESSIONs,其中源表位于MSSQL数据库中。列名称用双引号括起来,这会导致模板化问题。

列表达式为:

source_tab."Entry Number"

任务(Java BeanShell)

<$
   String SEL_COLS = "<%=odiRef.getColList(0, "", "[EXPRESSION]\t[ALIAS_SEP] [CX_COL_NAME]", ",\n\t", "", "")%>";
$>

此变量赋值失败,因为“在source_tab中。”条目号“未转义 - 代码无法编译。

odiRef.getQuotedString无法解决问题...

1 个答案:

答案 0 :(得分:2)

如果生成的代码作为JBS技术中的最终代码执行,

odiRef.getQuotedString可以提供帮助。当我们以下列方式使用它时(在? - ,$ - 或@ -substitution中):

<$
String SEL_COLS = <%=odiRef.getQuotedString(odiRef.getColList(0, "", "[EXPRESSION]\t[ALIAS_SEP] [CX_COL_NAME]", ",\n\t", "", ""))%>;
$>

然后结果失败了:

... Caused by: org.apache.bsf.BSFException: BeanShell script error: 
Parse error at line 3, column 37.  Encountered: Entry BSF info: ....
... 11 more

Text: <$
   String SEL_COLS = "SOURCE_TAB.\"Entry Number\"      ENTRY_NUMBER";
$>.

这看起来不错但不起作用。它可以作为JBS技术中的最终代码(我的意思是所有替换的结果)。不幸的是,任何替换都会出现反斜杠。

好的,如果标准的odiRef-functtion不起作用,我们自己编写:

<%
String getQuotedStringCustomized(String s){
   return '"'+s.replaceAll('"'.toString(),'"'+"+'"+'"'+"'+"+'"')+'"';
}
%>
-- other code........
<$
String SEL_COLS = <%=getQuotedStringCustomized(odiRef.getColList(0, "", "[EXPRESSION]\t[ALIAS_SEP] [CX_COL_NAME]", ",\n\t", "", ""))%>;
$>

如果无法使用Char类型,只有将"放入JBS替换中的Java文字的方法是使用Char文字'"'或使用'"'.toString()表达式进行连接。

最后:

在最终的JBS代码中,您可以使用\",但仅在替换内+'"'+