2012-01-24 13 views
2

基本クエリーを作成しました(Justin Caveありがとうございます)Oracleでクエリを構成するにはどうすればよいですか?

私はこのクエリを使用して、さまざまなテーブルやサブクエリに何度も参加してデータをチェックする必要があります。今後追加クエリが追加される可能性があります。だから最終的には、データのためにおそらく20ダースの小切手があり、結果はSSRSレポートに要約されます。これがMSSQLの場合は、クエリの結果を一時テーブルに格納し、最終的にはtempテーブルでselectを実行します。可能な限り多くの研究をしていますが、最良の方法はWITH句を使用して他の一時テーブルやクエリと結合して結果を得、すべてのクエリを結合して結果を得ることです。しかし、これは非常に乱雑で大きなものになるようです。私はグローバル・テンポラリ・テーブルを使用したいと思いますが、オラクルでは惑わされるようです。おそらく、これをモジュール化し整理するためのより良い方法がありますか?

私たちのライセンス契約によれば、oracleに新しいテーブルを追加することはできません(私は言いました)が、ビュー、ストアドプロシージャ、および関数を追加することができます。

ありがとうございます!

答えて

1

マテリアライズド・ビューの使用が禁止されていない場合は、これらを使用して一時表のすべての利点を得ることができます。

しかし、いくつかの異なるクエリでサブクエリの結果が必要な場合を除き、クエリごとに独立したサブクエリを好きなだけ使用し、それらがテーブルであるかのように操作できます。ほとんどの場合、きちんとしたクエリプランが得られます。

また、グローバルテンポラリテーブルを使用して分析を10倍高速化することは価値があります。ただし、機密データを信頼できない人に公開しない限り、それは価値があります。

+0

ありがとう!私が正しく理解していることを確認する。いくつかのマテリアライズド・ビューを使用してメイン・クエリを作成し、結果を別のマテリアライズド・ビューに挿入する一連のビューを作成できます。その後、後者の結果を選択してそれらをすべて削除しますか? – Paul

+0

はい、これはうまくいくと思います。複数のクエリ間で共有する高価なサブクエリがある場合は、これらのサブクエリのmビューを作成できます。 – 9000

+0

あなたの助けてくれてありがとう! – Paul

0

これらをさまざまなストアド・プロシージャにロールアップし、Oracleパッケージで囲みます。

次に、アプリケーションのロジック領域ごとにパッケージを作成できます。例えば。 PKG_USERS、PKG_ACCOUNTSなど

バージョン管理下に置くことができ、すべての変更を一目で確認できるので、変更を追跡することも簡単です。

それは私のためにうまくいけば、それはあなたを助けてくれます...

+0

こんにちはジェフリーとあなたの提案に感謝します。私はパッケージに精通していないが、私が探しているもののように思える。私はそれらをもう少し研究します。ビュー/ストアドプロシージャが呼び出されてできるだけ効率的になる回数を最小限に抑えることはできますか? – Paul

+0

SP /パッケージにはコードを含めることができますが、多くのデータは含まれません。これは一時テーブルをどのように置き換えることができますか?また、SPは問合せ内でコールするのが比較的コストがかかり、2つのREFカーソルを使用してPL/SQLコードで結合するのは、通常、純粋なSQLでこの結合を実行するよりも遅くなります。 – 9000

+0

可能であれば、1つの明確化。ストアドプロシージャは遅くはなく、実際には逆です。ストアド・プロシージャはOracleでコンパイルされるため、RDBMSはデータを取得するために必要な処理が分かっているため、処理が高速になります。インタプリタを介した解析がないため、クエリや操作が高速化されません。 (http://www.dba-oracle.com/art_ioug_proc.htm) (http://www.smart-soft.co.uk/Oracle/oracle-performance-tuning-part6.htm)(http: /スタックオーバーフロー。com/questions/372401/performance-of-dynamic-sql-vs-stored-procedures-oracle) –