我在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;
我有来自user::v_batch的参数映射,方向输出,数据类型LONG,参数0。
我有一个名为MyBatch的结果名,变量名为User::v_batch。
当我运行它时,我得到错误:
[执行SQL任务]错误:执行查询“BEGIN P_CREATE_BATCH”
(“事实米”?);END;”失败,错误如下:“ORA-06550:
第1行第7列:PLS-00306:中的参数数目或类型错误
调用“P_CREATE_BATCH”ORA-06550:line 1,column 7:PL/SQL:
语句被忽略”。可能的失败原因:查询有问题,
“ResultSet”属性设置不正确,参数设置不正确,
或连接未正确建立。
我已经用at数据类型为Int64的变量进行了尝试。我试过没有结果集。我忘了我试过多少种不同的排列方式。有时我会犯不同的错误,但这是因为我在尝试一些明显错误的东西。
如何成功调用返回LONG的Oracle过程,并在SSIS中获取该值?
更新,基于注释:
写入(在Oracle中)的基础表的数据类型为数字(18)。我制作了一个Oracle过程的版本,它返回数字,而不是LONG。
当我调用它时,它仍然会给我一个错误,我认为这是因为我需要一个不同类型的SSIS变量。过程确实运行,然后返回错误
[执行SQL任务]错误:执行查询“BEGIN”
P_CREATE_BATCHK('事实计量器',?);
END;”失败,错误如下:“ORA-06502:PL/SQL:numeric or value error:character string buffer too small
ORA-06512:在1号线。可能的失败原因:查询出现问题,“ResultSet”属性设置不正确、参数设置不正确或连接建立不正确。
我的参数是数据类型NUMERIC,变量是Int32,然后是Int64,然后是Double,然后是UInt64,最后是Decimal。剩下的选择不多了。
更新
如果我的SSIS变量为Double,参数数据类型为Double,并且没有结果集,则任务将运行。我还不知道是否可以访问返回值,但没有错误,所以这是一个过程。