私は長年、多くのプラットフォームでデータベース開発者をしてきましたが、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
。