3

私は長年、多くのプラットフォームでデータベース開発者をしてきましたが、Oracle での重い仕事はこれが初めてです。一連の構造を SQL Server から Oracle に移動する方法を 1 週間ずっと考えてきましたが、すべての道は壁で終わっているようです。

SQL Server には、一連のレコードを取得して簡単な計算を行い、結果を一時テーブルにピボットするクエリがあり、そこで 2 番目のクエリが一時テーブルを取得し、かなり複雑な計算と列の再グループ化を行います。これらのプロシージャは、グラフ作成パッケージ用のデータ ブロックを構築するために、異なるパラメータ セット (ユーザーが入力) を使用して 2 番目のクエリを呼び出す 3 番目のクエリにラップされます。

では、問題は、Oracle でのこのようなチェーンの「ベスト プラクティス」とは何ですか?

ここでOracleを使用している人々は、「適切なアプローチ」はテーブルを作成し、データをテーブルに入れ、それを渡すことだと言いました。確かにこれは間違っています。さまざまな計算の中間結果を保持するために、空のテーブルのデータベースを構築して維持する必要があるとは信じられません。

私は完璧だと思いsys_refcursor、最初のクエリをそのように構築しました(SQLを文字列として構築してから実行する必要はありませんでしたが、それでうまくいきました)。しかし、2番目のクエリに行ったとき、をsys_refcursorテーブルとしてロード/操作できませんでしたが、各値を変数に割り当ててループし、計算後に値を to に再連結する必要がありsys_refcursorました次のステップに進みます。確かにこれは間違っています。

最後に、必要に応じて開始し、完了時に破棄するいくつかのテーブル オブジェクトを使用できることを認めました。しかし今、インスタンス化が遅れていることを示す資料は見つかりません。テーブルを個別に構築し、アーティファクトとして構造内に残す必要があるようです。

では、データセットの計算と変換のブロックを一緒に連鎖させるためのOracleでの最良のアプローチは何ですか? 適切なドキュメントが見つからないだけですか? それとも間違った道を進んでいますか?それとも、Oracle を手続き型言語として扱い、データを配列にロードするだけでよいでしょうか (配列を作成できますか?) sys_refcursor

4

1 に答える 1

2

PL/SQL で ETL プロセスを実装するには、さまざまな方法があります。

pipeline table functionあなたが書いたものに最も近い -これは良いチュートリアルです.

dbms_scheduler( doc ) を使用して一連のアクションを作成することもできます。

しかし、個人的には、私はシンプルで愚かなキンダの男なので、pl / sqlでシンプルなパッケージを書くことをお勧めします。

役に立ちそうな本

Oracle® Databaseデータ・ウェアハウス・ガイド

PL/SQL 言語リファレンス - パフォーマンスのための PL/SQL アプリケーションのチューニング

于 2013-04-23T14:56:05.180 に答える