0

次のシグネチャを持つ tibco で実行するストアド プロシージャ (SP) が提供されています。

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いずれにせよ、私が読んだことについては、2 つの可能な解決策が進行中です。

  1. SQL ダイレクト
  2. Java カスタム関数

さて、疑問です。

ソリューション番号 1 を使用する場合、純粋な SQL で入力として提供するカーソルを作成する必要がありますが、どのように行うのでしょうか? 入力用に持っている値を使用して一時テーブルを作成し、そのテーブルのカーソルを開く必要がありますか? これがこれを行う唯一の方法ですか?

解決策 2 についてはまだ調べていませんが、Java はこれらの種類の入力と出力をサポートできると考え、配列を宣言するだけです。この仮定は正しいですか?これは簡単でしょうか、それともソリ​​ューション番号 1 のように SQL を呼び出す必要がありますか?

PS: この 2 つの可能な解決策だけですか? BW がこの WEIRD 入力と出力をサポートするようにするための回避策を備えた tibco グルはいますか? :P

前もって感謝します, ティアゴ・ブルンホソ・ヌネス

4

1 に答える 1

0

多くのグーグルの後、私がこの問題を克服することができた唯一の方法は、データベース上に、tibcoが認識できなかった入力と出力を可能なものにカプセル化するラッパーパッケージを作成することでした。

私が今やったことは:

  1. 2つの新しいテーブルを作成しました(1つは入力カーソル用、もう1つは出力用)。
  2. 入力として受け入れ、カーソルなしで単純なデータ型のみを出力するラッパーSPを作成しました。
  3. Tibcoは、作成されたテーブルに値の入力配列を挿入します。
  4. ラッパーSPはこのテーブルへのカーソルを開き、カーソルを使用して最初のSPを呼び出します。
  5. 最後に、出力カーソルからの値で出力テーブルを埋め、Tibcoはこのテーブルを読み取ります。

(私はおそらくそれがこれを行うための最良の方法ではないことを知っています...:S)

PS:oracle pl sqlがネイティブにxml入力をサポートしていることがわかったので、そのソリューションに進むことができました。これははるかにクリーンなソリューションのようですが、実装に時間がかかりすぎます...誰かが知識を持っている場合これについて、いくつかのヒントをいただければ幸いです。:)

于 2012-02-23T10:51:04.483 に答える