0

我正在尝试从 ODI 调用以下 PL SQL 过程。代码在 SQL Developer 中完美运行。

create or replace PROCEDURE OMS_UPD_CODE_STATO (myUID_ELAB IN NUMBER, myTABLE_NAME IN VARCHAR2, P_RESULT OUT VARCHAR2) AS

    C_TREC NUMBER;
    C_TOT NUMBER;
    str1 varchar2(1000);
    str2 varchar2(1000);

    BEGIN

      str1:='select to_number(rtrim(substr(utente, 18,23),''0'')) from '||   myTABLE_NAME || ' where TREC =''99'' AND UID_ELAB = '||myUID_ELAB;

      EXECUTE IMMEDIATE STR1 INTO C_TREC;

      str2:='select count(*) from '|| myTABLE_NAME || ' where TREC is not null';
      EXECUTE IMMEDIATE STR2 INTO C_TOT;

      IF C_TOT = C_TREC THEN 

      execute immediate 'update'|| myTABLE_NAME || 'set CODE_STATO = ''N''  WHERE UID_ELAB = '|| myUID_ELAB;
      P_RESULT:='OK';
      commit;
      ELSE 
      P_RESULT:='KO';

      END IF;

      END OMS_UPD_CODE_STATO;

在 ODI 中,我编写了如下程序:

      declare

      P_RESULT VARCHAR2(100);
      begin
      OMS_UPD_CODE_STATO( #OMS.UID_ELAB, #OMS.ATTR_NOME_TABELLA, P_RESULT);
      end;

其中前两个参数是 INPUT 参数,而第三个参数 P_RESULT 是 PL SQL 存储过程中存在的 OUT 参数。通过从 ODI 调用该过程,我收到以下错误:

 ODI-1228: Task Procedure-omsUpdateStato-callStored fails on the target  connection OMS_DEV.
 Caused By: java.sql.SQLException: ORA-06550: line 5, column 27:
 PLS-00357: Table,View Or Sequence reference 'OMS_S_PERSONE_FISICHE' not allowed in this context
 ORA-06550: line 5, column 1:
 PL/SQL: Statement ignored

at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:466)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:407)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1113)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:546)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:269)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:603)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:218)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:31)
at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:1000)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1316)
at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:2168)
at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:2100)
at oracle.jdbc.driver.OracleStatementWrapper.execute(OracleStatementWrapper.java:363)
at oracle.odi.runtime.agent.execution.sql.SQLCommand.execute(SQLCommand.java:205)
at oracle.odi.runtime.agent.execution.sql.SQLExecutor.execute(SQLExecutor.java:141)
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:206)
at oracle.odi.runtime.agent.execution.SessionTask.doExecuteTask(SessionTask.java:117)
at oracle.odi.runtime.agent.execution.AbstractSessionTask.execute(AbstractSessionTask.java:886)
at oracle.odi.runtime.agent.execution.SessionExecutor$SerialTrain.runTasks(SessionExecutor.java:2227)
at oracle.odi.runtime.agent.execution.SessionExecutor.executeSession(SessionExecutor.java:611)
at oracle.odi.runtime.agent.processor.TaskExecutorAgentRequestProcessor$1.doAction(TaskExecutorAgentRequestProcessor.java:719)
at oracle.odi.runtime.agent.processor.TaskExecutorAgentRequestProcessor$1.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:801)
at oracle.odi.runtime.agent.processor.impl.StartSessRequestProcessor.access$1400(StartSessRequestProcessor.java:74)
at oracle.odi.runtime.agent.processor.impl.StartSessRequestProcessor$StartSessTask.doExecute(StartSessRequestProcessor.java:702)
at oracle.odi.runtime.agent.processor.task.AgentTask.execute(AgentTask.java:180)
at oracle.odi.runtime.agent.support.DefaultAgentTaskExecutor$2.run(DefaultAgentTaskExecutor.java:108)
at java.lang.Thread.run(Thread.java:745)

你知道如何解决它吗?我打错电话了吗?谢谢

4

0 回答 0