ORA-00933 when 运行 ODI 12c 过程
ORA-00933 when running procedure in ODI 12c
我正在创建一个一次性过程,以从现有源更新目标 table 中新添加的列。我创建了更新语句,在 SQLDeveloper 中对其进行了测试,并确认它完全符合我的要求。但是,当我将此代码添加到过程任务中时,会出现 ORA-00933(SQL 命令未正确结束)错误。我附上了有问题的 sql 声明以及对我选择的选项的一些解释。
已完成:
- 数据库table中添加了新列
- 目标模型 table 已更新
- 映射已更新
- 初始加载已验证在新列中具有正确的结果
- 已验证期刊加载在新列中具有正确的结果
尝试过(无差异):
- 添加和删除分号 (;)
- 简化查询以删除 "WHERE EXISTS" 子句
目标命令:
UPDATE <%=odiRef.getSchemaName( "TARGET_SCHEMA", "D")%>.TARGET_TABLE target
SET NEW_COLUMN = (SELECT source.EXISTING_COLUMN
FROM <%=odiRef.getSchemaName( "SOURCE_SCHEMA", "D")%>.SOURCE_TABLE source
WHERE target.SOURCE_KEY = source.PRIM_KEY)
WHERE EXISTS (
SELECT 1
FROM <%=odiRef.getSchemaName( "SOURCE_SCHEMA", "D")%>.SOURCE_TABLE source
WHERE target.SOURCE_KEY = source.PRIM_KEY)
目标命令设置:
技术:甲骨文
事务隔离:无变化
上下文:执行上下文
逻辑模式:TARGET_SCHEMA
事务:自动提交
提交:未定义
错误信息:
ODI-1217: Session POPULATE_TARGET_TABLE_NEW_FLAG (123456789) fails with return code 933.
ODI-1226: Step Populate_target_table_new_flag fails after 1 attempt(s).
ODI-1232: Procedure Populate_target_table_new_flag execution fails.
ODI-1228: Task Procedure-Populate_target_table_new_flag-Populate target table with New Flag fails on the target connection SOURCE_SCHEMA.
Caused By: java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended
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)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:214)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:38)
at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:891)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1194)
at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1835)
at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1790)
at oracle.jdbc.driver.OracleStatementWrapper.execute(OracleStatementWrapper.java:301)
at oracle.odi.runtime.agent.execution.sql.SQLCommand.execute(SQLCommand.java:208)
at oracle.odi.runtime.agent.execution.sql.SQLExecutor.execute(SQLExecutor.java:142)
at oracle.odi.runtime.agent.execution.sql.SQLExecutor.execute(SQLExecutor.java:28)
at oracle.odi.runtime.agent.execution.TaskExecutionHandler.handleTask(TaskExecutionHandler.java:52)
at oracle.odi.runtime.agent.execution.SessionTask.processTask(SessionTask.java:216)
at oracle.odi.runtime.agent.execution.SessionTask.doExecuteTask(SessionTask.java:127)
at oracle.odi.runtime.agent.execution.AbstractSessionTask.execute(AbstractSessionTask.java:886)
at oracle.odi.runtime.agent.execution.SessionExecutor$SerialTrain.runTasks(SessionExecutor.java:2225)
at oracle.odi.runtime.agent.execution.SessionExecutor.executeSession(SessionExecutor.java:610)
at oracle.odi.runtime.agent.processor.TaskExecutorAgentRequestProcessor.doAction(TaskExecutorAgentRequestProcessor.java:718)
at oracle.odi.runtime.agent.processor.TaskExecutorAgentRequestProcessor.doAction(TaskExecutorAgentRequestProcessor.java:611)
at oracle.odi.core.persistence.dwgobject.DwgObjectTemplate.execute(DwgObjectTemplate.java:203)
at oracle.odi.runtime.agent.processor.TaskExecutorAgentRequestProcessor.doProcessStartAgentTask(TaskExecutorAgentRequestProcessor.java:800)
at oracle.odi.runtime.agent.processor.impl.StartScenRequestProcessor.access00(StartScenRequestProcessor.java:85)
at oracle.odi.runtime.agent.processor.impl.StartScenRequestProcessor$StartScenTask.doExecute(StartScenRequestProcessor.java:917)
at oracle.odi.runtime.agent.processor.task.AgentTask.execute(AgentTask.java:180)
at oracle.odi.runtime.agent.support.DefaultAgentTaskExecutor.run(DefaultAgentTaskExecutor.java:108)
at java.lang.Thread.run(Thread.java:748)
Caused by: Error : 933, Position : 331, Sql = UPDATE TARGET_TABLE target
SET NEW_COLUMN = (SELECT source.EXISTING_COLUMN
FROM SOURCE_SCHEMA.SOURCE_TABLE source
WHERE target.SOURCE_KEY = source.PRIM_KEY)
WHERE EXISTS (
SELECT 1
FROM SOURCE_SCHEMA.SOURCE_TABLE source
WHERE target.SOURCE_KEY = source.PRIM_KEY);, OriginalSql = UPDATE
TARGET_TABLE target
SET NEW_COLUMN = (SELECT source.EXISTING_COLUMN
FROM SOURCE_SCHEMA.SOURCE_TABLE source
WHERE target.SOURCE_KEY = source.PRIM_KEY)
WHERE EXISTS (
SELECT 1
FROM SOURCE_SCHEMA.SOURCE_TABLE source
WHERE target.SOURCE_KEY = source.PRIM_KEY);, Error Msg = ORA-00933: SQL command not properly ended
at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:499)
... 30 more
由于发布的代码中有无效字符,我希望这些字符应该被目标 table 所有者替换,而传递给 Oracle 执行的代码中有 table_name,我怀疑生成的SQL 不正确。无论如何,您是否可以捕获传递给 Oracle 的代码?
所以问题不完全 代码本身,而是我没有重新生成我的场景 in-between 代码更改的事实。我自己的错,我主要是在 ODI 中自学,并没有想过尝试...
感谢 Marmite Bomber,您的评论让我更深入地研究问题并意识到 "generated" 代码在我进行更改时并未更新。
我正在创建一个一次性过程,以从现有源更新目标 table 中新添加的列。我创建了更新语句,在 SQLDeveloper 中对其进行了测试,并确认它完全符合我的要求。但是,当我将此代码添加到过程任务中时,会出现 ORA-00933(SQL 命令未正确结束)错误。我附上了有问题的 sql 声明以及对我选择的选项的一些解释。
已完成:
- 数据库table中添加了新列
- 目标模型 table 已更新
- 映射已更新
- 初始加载已验证在新列中具有正确的结果
- 已验证期刊加载在新列中具有正确的结果
尝试过(无差异):
- 添加和删除分号 (;)
- 简化查询以删除 "WHERE EXISTS" 子句
目标命令:
UPDATE <%=odiRef.getSchemaName( "TARGET_SCHEMA", "D")%>.TARGET_TABLE target
SET NEW_COLUMN = (SELECT source.EXISTING_COLUMN
FROM <%=odiRef.getSchemaName( "SOURCE_SCHEMA", "D")%>.SOURCE_TABLE source
WHERE target.SOURCE_KEY = source.PRIM_KEY)
WHERE EXISTS (
SELECT 1
FROM <%=odiRef.getSchemaName( "SOURCE_SCHEMA", "D")%>.SOURCE_TABLE source
WHERE target.SOURCE_KEY = source.PRIM_KEY)
目标命令设置:
技术:甲骨文
事务隔离:无变化
上下文:执行上下文
逻辑模式:TARGET_SCHEMA
事务:自动提交
提交:未定义
错误信息:
ODI-1217: Session POPULATE_TARGET_TABLE_NEW_FLAG (123456789) fails with return code 933.
ODI-1226: Step Populate_target_table_new_flag fails after 1 attempt(s).
ODI-1232: Procedure Populate_target_table_new_flag execution fails.
ODI-1228: Task Procedure-Populate_target_table_new_flag-Populate target table with New Flag fails on the target connection SOURCE_SCHEMA.
Caused By: java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended
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)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:214)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:38)
at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:891)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1194)
at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1835)
at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1790)
at oracle.jdbc.driver.OracleStatementWrapper.execute(OracleStatementWrapper.java:301)
at oracle.odi.runtime.agent.execution.sql.SQLCommand.execute(SQLCommand.java:208)
at oracle.odi.runtime.agent.execution.sql.SQLExecutor.execute(SQLExecutor.java:142)
at oracle.odi.runtime.agent.execution.sql.SQLExecutor.execute(SQLExecutor.java:28)
at oracle.odi.runtime.agent.execution.TaskExecutionHandler.handleTask(TaskExecutionHandler.java:52)
at oracle.odi.runtime.agent.execution.SessionTask.processTask(SessionTask.java:216)
at oracle.odi.runtime.agent.execution.SessionTask.doExecuteTask(SessionTask.java:127)
at oracle.odi.runtime.agent.execution.AbstractSessionTask.execute(AbstractSessionTask.java:886)
at oracle.odi.runtime.agent.execution.SessionExecutor$SerialTrain.runTasks(SessionExecutor.java:2225)
at oracle.odi.runtime.agent.execution.SessionExecutor.executeSession(SessionExecutor.java:610)
at oracle.odi.runtime.agent.processor.TaskExecutorAgentRequestProcessor.doAction(TaskExecutorAgentRequestProcessor.java:718)
at oracle.odi.runtime.agent.processor.TaskExecutorAgentRequestProcessor.doAction(TaskExecutorAgentRequestProcessor.java:611)
at oracle.odi.core.persistence.dwgobject.DwgObjectTemplate.execute(DwgObjectTemplate.java:203)
at oracle.odi.runtime.agent.processor.TaskExecutorAgentRequestProcessor.doProcessStartAgentTask(TaskExecutorAgentRequestProcessor.java:800)
at oracle.odi.runtime.agent.processor.impl.StartScenRequestProcessor.access00(StartScenRequestProcessor.java:85)
at oracle.odi.runtime.agent.processor.impl.StartScenRequestProcessor$StartScenTask.doExecute(StartScenRequestProcessor.java:917)
at oracle.odi.runtime.agent.processor.task.AgentTask.execute(AgentTask.java:180)
at oracle.odi.runtime.agent.support.DefaultAgentTaskExecutor.run(DefaultAgentTaskExecutor.java:108)
at java.lang.Thread.run(Thread.java:748)
Caused by: Error : 933, Position : 331, Sql = UPDATE TARGET_TABLE target
SET NEW_COLUMN = (SELECT source.EXISTING_COLUMN
FROM SOURCE_SCHEMA.SOURCE_TABLE source
WHERE target.SOURCE_KEY = source.PRIM_KEY)
WHERE EXISTS (
SELECT 1
FROM SOURCE_SCHEMA.SOURCE_TABLE source
WHERE target.SOURCE_KEY = source.PRIM_KEY);, OriginalSql = UPDATE
TARGET_TABLE target
SET NEW_COLUMN = (SELECT source.EXISTING_COLUMN
FROM SOURCE_SCHEMA.SOURCE_TABLE source
WHERE target.SOURCE_KEY = source.PRIM_KEY)
WHERE EXISTS (
SELECT 1
FROM SOURCE_SCHEMA.SOURCE_TABLE source
WHERE target.SOURCE_KEY = source.PRIM_KEY);, Error Msg = ORA-00933: SQL command not properly ended
at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:499)
... 30 more
由于发布的代码中有无效字符,我希望这些字符应该被目标 table 所有者替换,而传递给 Oracle 执行的代码中有 table_name,我怀疑生成的SQL 不正确。无论如何,您是否可以捕获传递给 Oracle 的代码?
所以问题不完全 代码本身,而是我没有重新生成我的场景 in-between 代码更改的事实。我自己的错,我主要是在 ODI 中自学,并没有想过尝试...
感谢 Marmite Bomber,您的评论让我更深入地研究问题并意识到 "generated" 代码在我进行更改时并未更新。