Oracle11g多线程执行sql,关于oracle11g:从SSIS返回Oracle LONG值执行SQL任务

我在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是直接输入,ResultSet是单行,而我的SQL查询是

BEGIN

P_CREATE_BATCH ('FACT_METER',?);

END;

我有来自用户的参数映射:: v_batch,方向为Output,数据类型为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的数据类型。我尝试了没有结果集。我已经忘记尝试了多少种不同的排列方式。有时我会得到一个不同的错误,但这是因为我正在尝试明显错误的操作。

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

根据评论更新:

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

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

[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,然后是十进制。剩下的选择不多了。

更新资料

如果我的SSIS变量为Double,参数数据类型为Double,且未设置结果,则任务将运行。我尚不知道是否可以访问返回值,但是没有错误,因此可以解决。

您是否知道在Oracle中LONG不是数字类型,而是过时的LOB类型?

@BobJarvis我不是。 这可能是帮助我们解决此问题的重要线索。

@BobJarvis-即使只是简短的注释,我们也进行了大量搜索,因此我认为这个问题可能仍然有效。 如果您要将注释转换为答案,并建议在Oracle方面使用NUMBER,在SSIS方面使用DOUBLE,我会接受。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值