我在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等-即所有数字类型。