5

Sql Server Reporting Services 2005でレポートを作成し、Oracle11gデータベースに接続しています。返信を投稿するときに、私がMSSQL Serverに精通しており、Oracleに不慣れであることを知っておくと役立つでしょう。

複数のネストされたサブレポートがあり、外部レポートと同じデータで要約データを使用する必要がありますが、内部レポートで詳細に使用する必要があります。DBサーバーを複数の実行から保護するために、最初にいくつかの一時テーブルにデータを入力してから、レポートとサブレポートでそれらだけを複数回クエリすることを考えました。

SSRSでは、データセットは明らかにRDLファイルに表示される順序で実行されます。また、行セットを返さないデータセットを持つことができます。そこで、4つの一時テーブルにデータを入力するためのストアドプロシージャを作成し、これをレポートの最初のデータセットにしました。このSPは、SQLDeveloperから実行すると機能し、一時テーブルからデータをクエリできます。ただし、SSRSが同じセッションを再利用していないようであるため、これはうまくいかなかったようです。したがって、グローバル一時テーブルがON COMMIT PRESERVE ROWSで作成されたとしても、データセットは空でした。

「実際の」テーブルの使用に切り替え、各テーブルの主キーの一部である、新しい実行ごとに一意に生成される文字列形式のGUIDを渡すようになりました。これにより、次の行のみを取得できます。この実行。

Sql Developerからこれを実行すると、正常に機能します。例:

DECLARE
ActivityCode varchar2(15) := '1208-0916      ';
ExecutionID varchar2(32) := SYS_GUID();
BEGIN
CIPProjectBudget (ActivityCode, ExecutionID);
END;

この例ではGUIDがわからないことを気にしないでください。これは、行が4つのテーブルに挿入されるため、GUIDが機能することを証明するだけです。

しかし、SSRSレポートでは、データセットに行がまだ表示されておらず、SQLDeveloperは行が挿入されていないことを確認しています。

だから私は次のように考えています:

  • Oracleは暗黙のトランザクションを使用しますが、変更がコミットされませんか?
  • 行セットを返さないSPが実行されていることを証明できますが(パラメーターマッピングを省略した場合、レポートのレンダリング時にパラメーターが不足していると文句を言うため)、実際には実行されていない可能性があります。何とかして。
  • 間違った実行順序は問題ではなく、行がテーブルに表示されますが、そうではありません。

これを実現する方法についてのアイデアに興味があります(特に、メインクエリを複数回実行しないことに関する部分)。レポート全体を再設計します。ストアドプロシージャの使用を停止します。あなたが好きなものを提案してください!私はこれを機能させるのに助けが必要で、行き詰まっています。

詳細が必要な場合は、SSRSレポートに、いくつかのヘッダー値を持ち、サブレポートを含むListオブジェクト(データセットの各行に対して1回繰り返されるコンテナー)があります。最終的には、合計4つのレポートが作成されます。1つのメインレポートと3つのネストされたサブレポートです。各サブレポートは、親レポートのリストに含まれます。

4

1 に答える 1

3

はぁ。

SPで選択されている列にはcharデータ型がありますが、SPにはそのvarchar2入力パラメーターがあります。Oracleでは、varchar2変数は実際には末尾のスペースを失います(SQL Serverとは異なります)。その上RTrim()、データベースから照会されたSSRSパラメーターで実行していました。

知りたい人のために...OracleのSPは行セットを返すことができません。したがって、SSRSからSPを実行している場合は、おそらくテーブルにデータを入力する必要があります。ただし、SSRSは通常、デフォルトでクエリを同時に実行します。後のクエリが前のクエリの結果に適切に依存できるようにクエリをシリアルに実行するには、SPを実行するデータセットを編集し、[データソース]ドロップダウンの横にある[...]ボタンをクリックして、下部にある[単一のトランザクションを使用する]チェックボックス。SPがRDLファイルにリストされている最初のデータセットである限り、SPが最初に実行され、他のデータセットは実行が終了するまで待機します。注:この設定は、同じデータソースを使用するすべてのデータセットに適用されます。

于 2009-07-06T23:56:05.957 に答える