Oracle ODI:KM Java BeanShell-转义双引号
我想在知识模块的任务中设置一个变量,目标技术设置为JavaBeanshell。该值表示映射表达式,其中源表位于MSSQL数据库中。列名被双引号包围,这会导致模板设置问题 列表达式为:Oracle ODI:KM Java BeanShell-转义双引号,oracle,oracle-data-integrator,Oracle,Oracle Data Integrator,我想在知识模块的任务中设置一个变量,目标技术设置为JavaBeanshell。该值表示映射表达式,其中源表位于MSSQL数据库中。列名被双引号包围,这会导致模板设置问题 列表达式为: source_tab."Entry Number" 任务(Java BeanShell) 此变量赋值失败,因为“在源代码选项卡中。”条目号“未转义-代码未编译 odiRef.getQuotedString不能解决问题…odiRef.getQuotedString如果生成的代码作为JBS技术中的最终代码执行,则
source_tab."Entry Number"
任务(Java BeanShell)
此变量赋值失败,因为“在源代码选项卡中。”条目号“未转义-代码未编译
odiRef.getQuotedString不能解决问题…
odiRef.getQuotedString
如果生成的代码作为JBS技术中的最终代码执行,则可能会有所帮助。当我们以以下方式使用它时(在?-、$-或@-替换中):
然后结果如下所示:
... 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";
$>.
…由以下原因引起:org.apache.bsf.bsfeexception:BeanShell脚本错误:
第3行第37列的分析错误。遇到:条目BSF info:。。。。
…还有11个
文本:。
这看起来不错,但不起作用。它可以作为JBS技术中的最终代码(我是指所有替换的结果)使用。不幸的是,任何替换都会产生反斜杠
好的,如果标准的odiRef函数不起作用,让我们编写自己的:
<%
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", "", ""))%>;
$>
--其他代码。。。。。。。。
在JBS替换中,将“
放入Java文本中的唯一方法是使用Char literal'”
或使用'”.toString()
表达式(如果无法使用Char type)
最后:
在最终的JBS代码中,您可以使用
\“
,但在替换中,只能使用+'“+
”将双引号连接起来,作为一个字符为我指明了正确的方向。我的情况有点变化,实际上我不得不在char本身中避开双引号,就像'\"'. 我真的不喜欢ODI处理这件事的方式——有时候模板制作感觉就像是在射自己的腿。单引号是文字。因此,内部只能出现一个符号。例如,'X'
是正确的,但是'AB'
是错误的。如果使用“\”
,则它相当于“
(无反斜杠)。如上所述,ODI在JBS替换中“吃”反斜杠。这是源代码处理的结果。ODI总是将所有内容转换为JBS代码,然后再次打印代码,然后再执行。因此,我如何告诉beanshell实际执行一个必须在字符串中包含双引号的代码?
... 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";
$>.
<%
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", "", ""))%>;
$>