繁体   English   中英

为什么 ODI 12c 过程由于变量上的 ORA-00911 错误而失败

[英]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 中的第一步

很容易错过绿色箭头。 许多 ODI 开发人员(包括我在内)都花了数小时调试 package,然后才意识到这是因为第一步。

附加说明:您不必对 vcounter 使用刷新查询,您可以使用具有增量模式的设置变量步骤

在此处输入图像描述

我没有答案,事实上,和 ADati 有同样的问题。 我没有从 JeromeFr 的答案中看到解决方案,因为简单的增量不会刷新需要从数据库中提取数据的变量。 因此,类似于 Adati:

  • 我有一个字母数字变量,旨在保存文件的名称。 - 我有一个带有 FILE_NUM 和 FILENAME 的数据库表。
  • 我有一个第二个变量,它是一个计数器,最初是使用数据库中的 min(FILE_NUM) 填充的
  • 所以,简单的 SQL 使用 ODI 变量,就像 Adati 使用的代码一样。
    Select FILENAME from table_of_files where FILE_NUM = #2nd_variable
  • ODI 会引发相同的错误,因为它不喜欢 # 字符,ODI 要求该字符表示变量的使用。

那么知道如何解决这个问题吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM