从tibco bw调用存储过程,并将光标作为输入

时间:2012-02-10 18:18:59

标签: oracle plsql tibco

我有一个提供的存储过程(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 Direct
  2. Java自定义函数
  3. 现在,我怀疑。

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

    我还没有探索过第二个解决方案,但我认为Java可以支持这些输入和输出,我只是声明了数组。这个假设是对的吗?会不会这么容易,或者我会像解决方案1那样调用sql?

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

    提前致谢, Tiago Brunhoso Nunes

1 个答案:

答案 0 :(得分:0)

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

我现在所做的是:

  1. 创建了两个新表(输入游标为1,输出为另一个);
  2. 创建了一个包装器SP,它接受输入并仅输出简单的数据类型 - 没有游标;
  3. Tibco将输入的值数组插入到创建的表中;
  4. 包装器SP打开一个光标到该表并使用光标调用第一个SP;
  5. 最后,它使用输出光标的值填充输出表,Tibco读取此表;
  6. (我知道这可能不是最好的方法......:S)

    PS:据我所知,oracle pl sql支持本机xml输入,我可以使用这个解决方案,这似乎是一个更清晰的解决方案,但实现起来需要太长时间。如果有人对此有任何了解,我将不胜感激! :)