環境は Oracle 9 & 10 です。DBA レベルのアクセス権はありません。
問題は、特定の列が別のスキーマの特定のテーブルに存在することを確認することです。
対処するケースは 2 つあります。
- 同じインスタンス内の別のスキーマ
- db_link を使用した別のインスタンスのスキーマ
私のスキーマFREDと別のスキーマBARNEYを考えて、私はこのようなことを試みました
SELECT 1
FROM BARNEY.USER_TAB_COLS
WHERE TABLE_NAME = 'SOME_TABLE'
AND COLUMN_NAME = 'SOME_SPECIFIC_COLUMN'
[1]: (エラー): ORA- 00942 : テーブルまたはビューが存在しません
これについてしばらく悩んだ後、USER_TAB_COLS は実際にはテーブルではないことに気付きました。ビューです。私はずっとテーブルから選択してきましたが、ビューからは選択していません。
db_link で同じことを試してみたところ、データが戻ってくるのを見て驚きました。db_link には schema_name/password が埋め込まれているため、他のスキーマに効果的にログインし、ビューに到達できるようになるため、機能したことは理にかなっているように思えます。
グーグルで検索し、オラクルのドキュメントの山で眼球をすり減らしたので、正しい方向に向けてくれる人、または少なくとも何が欠けているかを指摘してくれる人を探しています。
特定の列が存在することを検証するために、同じインスタンス内のスキーマからユーザー テーブル関連のメタデータを取得するために使用できる手法は何ですか?
前もって感謝します。
悪の。
良い答えには+1。ありがとうございました。