[英]Why ODI 12c procedure fail due to ORA-00911 error on a variable
我正在学习 ODI 并在程序中测试循环和变量。 但是,当我 go 测试变量更新查询时,使用其他变量作为 where 子句的条件,查询执行失败并出现错误 ORA-00911。
这是 vcounter 的更新查询:
select #DEMO_DWH.vcounter + 1
from dual
这是 vidper 的更新查询:
Select idper
From dwh.t_starter
where id_start = #DEMO_DWH.vcounter
从这两个查询中,我得到了这个正文的错误 ODI-20123:
java.sql.SQLSyntaxErrorException:ORA-00911:carattere 无效
at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:495) at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:447) at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1055 ) at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:624) at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:253) at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:第613章) ement.doOall8(T4CPreparedStatement.java:227) at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:60) at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:748) at oracle.jdbc.driver .OracleStatement.executeMaybeDescribe(OracleStatement.java:965) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1157) at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3833) at oracle.Z84BE FFD3A0D49636A58CE6080CAA87C7Z.driver.T4CPreparedStatement.executeInternal(T4CPreparedStatement.java:1344) at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3875) at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1166) at com .sunopsis.sql.SnpsQuery.executeQuery(SnpsQuery.java:631) at com.sunopsis.graphical.frame.edit.EditFrameSnpVar.handleTestVariableQueryAction(EditFrameSnpVar.java:1172) at com.sunopsis.graphical.frame.edit.EditFrameSnpVar.access 300 美元(EditFrameSnpVar.java:120)在 Z4D236 D9A2D102C5FE6AD1C50DA4BEC50Z.sunopsis.graphical.frame.edit.EditFrameSnpVar$4.actionPerformed(EditFrameSnpVar.java:502) at com.sunopsis.graphical.component.toolbar.OdiTextAreaToolbarAction.executeAction(OdiTextAreaToolbarAction.java:133) at com.sunopsis.graphical.component .toolbar.AbstractOdiToolbarAction.actionPerformed(AbstractOdiToolbarAction.java:204) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) at javax.swing. javax.swing.DefaultButtonModel.setPressed(D efaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290) at java.awt.Component.processMouseEvent(Component .java:6539) at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) at java.awt.Component.processEvent(Component.java:6304) at java.awt.Container.processEvent(Container.java:2239)在 java.awt.Component.dispatchEventImpl(Component.java:4889) 在 java.awt。 chEventImpl(Container.java:2297) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904) at java.awt.LightweightDispatcher.processMouseEvent(Container.java :4535) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476) at java.awt.Container.dispatchEventImpl(Container.java:2283) at java.awt.Window.dispatchEventImpl(Window.java:2746) at java .awt.Component.dispatchEvent(Component.java:4711) 在 java.awt.E ventQueue.dispatchEventImpl(EventQueue.java:760) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3. run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain. java:84) at java.awt.EventQueue$4.run(EventQueue.java:733) at java.awt.EventQueu e$4.run(EventQueue.java:731) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) at java.awt.EventQueue.dispatchEvent(EventQueue .java:730) at oracle.javatools.internal.ui.EventQueueWrapper._dispatchEvent(EventQueueWrapper.java:169) at oracle.javatools.internal.ui.EventQueueWrapper.dispatchEvent(EventQueueWrapper.java:151) at java.awt.EventDispatchThread. pumpOneEventForFilters(EventDispatchThread.java:205) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.Z93F725A07423FE1 C889F448B33D21F46Z:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) Caused by: Error: 911, Position: 50, Sql = Select idper From dwh.t_starter where id_start = #DEMO_DWH.vcounter, OriginalSql = Select idper From dwh.t_starter where id_start = #DEMO_DWH.vcounter,错误消息 = ORA-00911:carattere 无效
在 oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.Z93F725A07423FE1C889F448B33D251F46Z:499 更多...)
如果我用数值替换对两个变量(#demo_dwh.vcounter 和#demo_dwh.vidper)的引用,则测试成功。 所以我假设我在引用变量时做错了。
问题是左侧 vcounter 的声明步骤从未执行。 目前,您的 package 的起点是 travaso_idper 映射。 你可以通过绿色的小箭头来判断。
您需要做的是右键单击最左边的步骤和 select First Step 。
很容易错过绿色箭头。 许多 ODI 开发人员(包括我在内)都花了数小时调试 package,然后才意识到这是因为第一步。
附加说明:您不必对 vcounter 使用刷新查询,您可以使用具有增量模式的设置变量步骤
我没有答案,事实上,和 ADati 有同样的问题。 我没有从 JeromeFr 的答案中看到解决方案,因为简单的增量不会刷新需要从数据库中提取数据的变量。 因此,类似于 Adati:
那么知道如何解决这个问题吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.