2

オラクルに送信される直前にSQLクエリを変更する高度なオラクル機能はありますか?または、結果セットを変更する可能性がありますか?特定の条件に基づいていますか?クエリを送信するプロセスの名前に基づいている可能性がありますか?またはクエリテキストに基づいていますか?

シナリオは、プロセス(C ++で記述)がクエリを実行していて、C++コードを変更する方法がないというものです。そのプロセス内の特定のビジネス検証が失敗しています。検証が失敗しないようにするために、返されたデータセットを操作するか、Oracleエンジンに送信される直前にselectクエリを操作する方法が必要です。

C++コードはこの正確なクエリを実行しています

SELECT PL_ID FROM A_HDR WHERE ENT_NBR =''

ORACLEが常に次のクエリを認識して実行するように変更したい

SELECT NULL FROM A_HDR WHERE ENT_NBR =''

案内してください

4

1 に答える 1

2

Oracle Virtual Private Databaseは、あなたが探しているものかもしれません。マニュアルから:

Oracle Virtual Private Database(VPD)を使用すると、セキュリティポリシーを作成して、行および列レベルでデータベースアクセスを制御できます。基本的に、Oracle Virtual Private Databaseは、Oracle Virtual Private Databaseのセキュリティ・ポリシーが適用されたテーブル、ビュー、またはシノニムに対して発行されるSQL文に動的WHERE句を追加します。

SYS_CONTEXTからプロセスとクエリテキストを取得できる場合があります。たとえば、sys_context('userenv', 'current_sql')およびsys_context('userenv', 'module')。また、より多くの情報を取得するためにを使用する必要がある場合がありGV$SESSIONます。

ただし、可能であればVPDは避けたほうがいいと思います。すべてのSQLステートメントをバックグラウンドでサイレントに変換することは非常に混乱します。開発とトラブルシューティングが非常に困難になる可能性があります。


アップデート

Oracle 12cのSQL​​変換フレームワーク機能は、おそらくこの問題の最善の解決策です。

于 2012-10-18T04:18:53.333 に答える