【问题标题】:Return Oracle LONG value from SSIS Execute SQL Task从 SSIS 执行 SQL 任务返回 Oracle LONG 值
【发布时间】:2018-08-06 16:00:14
【问题描述】:

我在 Oracle 中有一个将 varchar2 作为输入并返回 long 的过程。

我想从 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。

当我运行它时,我得到了错误:

[执行 SQL 任务] 错误:执行查询“BEGIN P_CREATE_BATCH ('FACT_METER',?); END;”失败,出现以下错误:“ORA-06550: 第 1 行,第 7 列:PLS-00306:错误的参数数量或类型 调用“P_CREATE_BATCH”ORA-06550:第 1 行,第 7 列:PL/SQL: 语句被忽略”。可能的失败原因:查询有问题, “ResultSet”属性设置不正确,参数设置不正确, 或未正确建立连接。

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

如何成功调用返回 LONG 的 Oracle 过程,并在 SSIS 中获取该值?

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

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

[执行 SQL 任务] 错误:执行查询“BEGIN P_CREATE_BATCHK ('FACT_METER',?); END;”失败,出现以下错误:“ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小 ORA-06512: at line 1"。可能的失败原因:查询问题、“ResultSet”属性设置不正确、参数设置不正确或连接未正确建立。

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

更新 如果我的 SSIS 变量为 Double,参数数据类型为 Double,没有结果集,则任务运行。还不知道能不能访问到返回值,但是没有报错,所以是进步了。

【问题讨论】:

  • 您是否知道在 Oracle 中,LONG不是数字类型,而是 LOB 的过时类型?
  • @BobJarvis 我不是。这可能是帮助我们解决这个问题的重要线索。
  • @BobJarvis - 尽管这是一个简短的说明,但我们进行了大量搜索,所以我认为这个问题仍然有效。如果您要将评论转换为答案,并建议在 Oracle 端使用 NUMBER,在 SSIS 端使用 DOUBLE,我会接受。

标签: oracle oracle11g ssis ssis-2012


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多