Вызов хранимой процедуры из Tibco BW с курсором в качестве входных данных - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть предоставленная хранимая процедура (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

Теперь мои сомнения.

Если я собираюсь использовать решение № 1, мне нужно создать курсор для ввода в качестве ввода в чистом sql, но как мне это сделать?Должен ли я создать временную таблицу со значениями, которые у меня есть для ввода, а затем открыть курсор для этой таблицы?Это единственный способ сделать это?

Я еще не исследовал решение номер два, но я подумал, что Java может поддерживать такие входы и выходы, и я просто объявляю массивы.Это предположение верно?Будет ли это так просто, или мне придется вызывать sql, как в решении № 1?

PS: эти 2 возможных решения единственные?Есть ли гуру тибко с обходным решением, чтобы BW поддерживал эти странные входы и выходы?: P

Заранее спасибо, Tiago Brunhoso Nunes

1 Ответ

0 голосов
/ 23 февраля 2012

После долгих поисков я смог решить эту проблему, создав единый пакет-обертку в базе данных, который инкапсулирует входные и выходные данные, которые tibco не может распознать в то, что может.

На данный момент я сделал:

  1. Созданы две новые таблицы (1 для курсора ввода и еще одна для вывода);
  2. Создан упаковщик SP, который принимает в качестве входных данных и выводит только простые типы данных - без курсоров;
  3. Tibco вставляет входной массив значений в созданную таблицу;
  4. Оболочка SP открывает курсор к этой таблице и вызывает первый SP с курсорами;
  5. Наконец, он заполняет выходную таблицу значениями из выходного курсора, и Tibco читает эту таблицу;

(я знаю, что, вероятно, это не лучший способ сделать это ...: S)

PS: Насколько мне известно, oracle pl sql поддерживает исходные XML-входы, и я мог бы перейти к этому решению, которое, кажется, намного чище, но мне потребовалось бы слишком много времени для его реализации ... Если у кого-то есть какие-либо знания по этому поводу, я был бы признателен за несколько советов! :)

...