如果错误消息具有单引号和冒号,如何将ODI步骤错误消息插入到Oracle表中

时间:2014-09-03 05:29:08

标签: sql oracle oracle11g oracle-data-integrator

我试图将ODI步骤错误消息插入到oracle表中。 我使用<%=odiRef.getPrevStepLog("MESSAGE")%>捕获了错误消息。

ODI-1226: Step PRC_POA_XML_synchronize fails after 1 attempt(s). 
ODI-1232: Procedure PRC_POA_XML_synchronize execution fails. 
ODI-1227: Task PRC_POA_XML_synchronize (Procedure) fails on the source XML connection XML_PFIZER_LOAD_POA_DB_DEV. 
Caused By: java.sql.SQLException: class java.sql.SQLException
oracle.xml.parser.v2.XMLParseException: End tag does not match start tag 'tns3:ContctID'. 
    at com.sunopsis.jdbc.driver.xml.SnpsXmlFile.readDocument(SnpsXmlFile.java:459) 
    at com.sunopsis.jdbc.driver.xml.SnpsXmlFile.readDocument(SnpsXmlFile.java:469)

当我尝试将其插入表格时,我收到以下错误:

Missing IN or OUT parameter at index:: 1

我尝试使用substrreplace。在错误消息的中间没有任何作用,我们只有一个引号'tns3:ContctID'

有没有办法将其插入表格?

2 个答案:

答案 0 :(得分:0)

如果你想使用纯粹的Java BeanShell并且你给出了太少的细节来获得简短而直接的答案,那就很难了,比如

  • 你如何尝试插入此命令(仅限源/目标,bean shell,Oracle SQL + jBS,jython,groovy等...)

这里的问题不仅是引用,还包括换行符。 要替换它们会更加困难,因为每个解析步骤<%<?<@都需要不同的技巧来定义这些文字

如果您编写Jython任务以插入日志数据(Jython in technology),那么可以肯定的是。 在那里,您可以使用Python功能进行多行字符串文字 简单地:

⋮
err_log = """   
             <?=odiRef.getPrevStepLog("MESSAGE")?>
             """
⋮

答案 1 :(得分:0)

几天前我遇到了这个错误。我在ODI中应用了下面提到的解决方案...

使用 - q&#39;#&lt;%= odiRef.getPrevStepLog(&#34; MESSAGE&#34;)%&gt;#&#39; 这将转义INSERT语句的反转逗号(&#39;)。

我在我的代码中使用了它并且它工作正常:)

例如 - 选择&#39;测试&#39; abcd&#39;来自双重; 此查询将给出以下错误 &#34; ORA-01756:引用的字符串未正确终止&#34;

选择q&#39;#testing&#39; abcd#&#39;来自双重; 此查询没有错误,我们在SQL Developer中得到以下响应 测试&#39; ABCD