【发布时间】:2017-07-21 00:06:23
【问题描述】:
我正在尝试构建一个 ODI 过程,它将从 oracle 数据库元数据表中获取模式名称、数据库过程名称和参数。参数字段包含一个ODI全局变量的名称。source命令是这样的
SELECT SCHEMA_NAME VAR_SCHEMA, PROCEDURE_NAME VAR_PROCEDURE, PARAMETER_NAME
VAR_PARAMETER FROM SCHEMA-NAME.TABLE_NAME
source 命令的输出是这样的:
VAR_SCHEMA_NAME VAR_TABLE_NAME VAR_PARAMETER
ABC PROC_LIST TO_DATE('#VAR_ETL_LOAD_DATE','DD/MM/RRRR')
这里,#VAR_ETL_LOAD_DATE 是 ODI 中的全局变量。
在过程的目标命令中,我想使用源命令中的这些信息来执行元数据表中列出的过程。我写了一个这样的命令:
DECLARE
VVC_SQL_STMT LONG;
BEGIN
VVC_SQL_STMT := 'BEGIN
#VAR_SCHEMA_NAME.#VAR_PROCEDURE_NAME(#VAR_PARAMETER);
END;';
INSERT INTO AK_TST2 VALUES(VVC_SQL_STMT,SYSDATE);
COMMIT;
EXECUTE IMMEDIATE (VVC_SQL_STMT);
END;
此代码在 ODI 中给出以下错误:
ODI-1228: Task PROC_SP_HANDLER (Procedure) fails on the target ORACLE
connection OCDM_SYS.
Caused By: java.sql.SQLException: ORA-06550: line 8, column 61:
PLS-00103: Encountered the symbol "#" when expecting one of the following:
* & = - + ; < / > at in is mod remainder not rem
<an exponent (**)> <> or != or ~= >= <= <> and or like like2
like4 likec between || multiset member submultiset
这是什么原因?如何通过从元数据表中读取过程名称和参数在 ODI 中执行存储过程?
【问题讨论】:
标签: sql oracle oracle-data-integrator