Return 来自 SSIS 执行的 Oracle LONG 值 SQL 任务

Return Oracle LONG value from SSIS Execute SQL Task

我在 Oracle 中有一个过程将 varchar2 作为输入并且 returns 很长。

我想从 SSIS 运行 该过程,然后在后续的 SSIS 步骤中使用该值。

我有一个序列容器,所以一旦我收到那个结果,我就可以使用它。但是我没有调用该程序。我尝试了各种方法,但总是出错。

这是我的:

在 Oracle 中,我的过程(不是我的,所以我无法更改)定义为

P_CREATE_BATCH (V_NAME IN VARCHAR2, V_BATCH OUT LONG)

在 SSIS 中,我有一个名为 v_batch 的变量,它是 Int32,值为 0。 我还有一个执行 SQL 任务。它有一个到 Oracle 数据库的 OLE 连接。 SourceType 是 Direct input,ResultSet 是 Single row,我的 SQL Query 是

BEGIN
  P_CREATE_BATCH ('FACT_METER',?);
END;

我有来自 user::v_batch 的参数映射,方向输出,数据类型 LONG,参数 0。 我有一个名为 MyBatch 的结果名称,变量名称为 User::v_batch.

当我 运行 它时,我收到错误:

[Execute SQL Task] Error: Executing the query "BEGIN P_CREATE_BATCH ('FACT_METER',?); END;" failed with the following error: "ORA-06550: line 1, column 7: PLS-00306: wrong number or types of arguments in call to 'P_CREATE_BATCH' ORA-06550: line 1, column 7: PL/SQL: Statement ignored". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

我已经用我的数据类型为 Int64 的变量试过了。我试过 none 的结果集。我忘记了我尝试过多少种不同的排列。有时我会得到不同的错误,但这是因为我正在尝试一些明显错误的事情。

如何成功调用一个 return 为 LONG 的 Oracle 过程,并在 SSIS 中获取该值?

更新,基于评论: 写入(在 Oracle 中)的基础 table 的数据类型为 number(18)。我制作了一个 returns NUMBER 而不是 LONG 的 Oracle 过程版本。

当我调用它时,它仍然给我一个错误,我认为这是因为我的 SSIS 变量需要不同的类型。该过程执行 运行,然后 return 出现错误

[Execute SQL Task] Error: Executing the query "BEGIN P_CREATE_BATCHK ('FACT_METER',?); END;" failed with the following error: "ORA-06502: PL/SQL: numeric or value error: character string buffer too small ORA-06512: at line 1". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

我的参数是 NUMERIC 数据类型,变量是 Int32,然后是 Int64,然后是 Double,然后是 UInt64,最后是 Decimal。剩下的选项不多了。

更新 如果我的 SSIS 变量为 Double,参数数据类型为 Double,没有结果集,任务 运行s。我还不知道我是否可以访问 return 值,但没有错误,所以它是进步。

LONG 不是 Oracle 中的数字类型 - 它是 LOB 的一种已弃用的变体。在 Oracle 中,您应该使用 NUMBER 类型来存储数值。 NUMBER 是用于存储具有 38 位精度的以 10 为底的浮点值的基本数据类型,因此不会遇到无法在例如中表示的值(例如 0.1)的问题。 IEEE-754 二进制浮点值。在 SSIS 端,这将对应于不同的 DOUBLE、INT、DECIMAL 等 - 即所有数字类型。