0

我有一个提供的存储过程 (SP),我应该在 tibco 中执行它,它具有以下签名:

PROCEDURE  GET_STOCK_QTY(
  WarehouseId Number,
  LineItem ref_lines,
  ResponseCode OUT Number,
  ResponseDesc OUT Varchar2,
  RespLineItems OUT sys_refcursor
);

*ref_lines* 定义如下:

TYPE items_record is RECORD(
  ItemCode varchar2(15),
  ItemQuantity number
);
type ref_lines IS REF CURSOR RETURN items_record;

所以,正如您已经注意到的,我有一个光标作为 SP 的输入和输出。我已经在谷歌上搜索这类问题,发现 tibco 不支持这些类型的输入和输出,我还发现它甚至不支持布尔原生类型,这很奇怪......:S不管怎样,就我所读到的而言,有两种可能的解决方案正在开发中:

  1. SQL 直接
  2. Java 自定义函数

现在,我的怀疑。

如果我要使用解决方案 1,我必须构建光标以在纯 sql 中作为输入提供,但我将如何做呢?我是否必须使用输入的值创建一个临时表,然后为该表打开一个游标?这是唯一的方法吗?

我还没有探索第二个解决方案,但我认为 Java 可以支持这种输入和输出,我只是声明了数组。这个假设正确吗?会这么简单,还是我会像在解决方案 1 中那样调用 sql?

PS:这两种可能的解决方案是唯一的吗?是否有任何 tibco 大师提供解决方法以使 BW 支持此 WEIRD 输入和输出?:P

在此先感谢蒂亚戈·布鲁霍索·努内斯

4

1 回答 1

0

经过大量谷歌搜索后,我设法克服这个问题的唯一方法是在数据库上创建一个包装器包,将 tibco 无法识别的输入和输出封装成它可以识别的东西。

我现在所做的是:

  1. 创建了两个新表(1 个用于输入游标,另一个用于输出);
  2. 创建了一个包装器 SP,它只接受简单数据类型作为输入和输出 - 没有游标;
  3. Tibco 将输入的值数组插入到创建的表中;
  4. 包装器 SP 打开该表的游标并使用游标调用第一个 SP;
  5. 最后,它用来自输出游标的值填充输出表,Tibco 读取该表;

(我知道这可能不是最好的方法......:S)

PS:据我所知,oracle pl sql 支持本机 xml 输入,我本可以使用该解决方案,这似乎是一个更清洁的解决方案,但实施起来需要很长时间......如果有人有任何知识在这方面,我将不胜感激一些提示!:)

于 2012-02-23T10:51:04.483 回答