使い方ROWID、Oracle参ビュー
-
29-10-2019 - |
質問
私が作り出してしまおうというもの識別子、各列のがあります。を示していま参加は多くのテーブルがないテーブルの主キーもこの特定を行います。
いては、google検索のようになっきする"という目標の達成に向けての使用rowid?がんなどの参考の観光スポットの拠点にrowid.以下の例では、どのよう想像したらrowidのようであれば"は曖昧なカラム'エラーとなっていますので指定する特定のテーブルrowid.
Ex:
with v_someTable (select...),
v_anotherTable as (select blah, id from v_someTable where...),
v_yetAnotherTable as (select foo, id from v_someTable where...)
select distinct rowid, rt.key, v1.blah, v2.foo
from realTable rt
left join v_anotherTable v1 on v1.id=rt.id
left join v_yetAnotherTable v2 on v2.id=rt.id
うことによりこれをクエリとしない保存されている。他の助けがをお願いいたします。
よろしく!
解決
私の理解では、rowid
は、結果セットの行ではなく、物理テーブルの行を参照します(これは事実上ビューです)。
各行の一意の識別子を取得するには、結合するテーブルの主キーを何らかの方法で組み合わせる必要があります。
他のヒント
すべてのテーブルに主キーがない場合は、個々のテーブルからROWIDを選択して、それらを連結できます。 ジェネラコディセタグプレ
ROWID疑似列は使用しないでください。これはストレージに依存します(有用なENABLE ROW MOVEMENT
を使用すると変更される可能性があります)。また、これを使用して、ビュー上の(結合された)レコードを効率的な方法で検索することもできません。
この場合、レコードで実際のPKを使用することをお勧めします(インデックスルックアップが機能するため)。そして、私はそれらを結合しませんが、複数の列を使用するだけです-この方法でのみ、それらを再選択できます(インデックスサポート付き)。
この問いに答えるだろうことは明らかになってきもの際はご注意くださいconcatinating主な鍵となります。例えばき key1 = 23 and key2 = 45
とconcatinateで 2345
明確ではない場合はキーにした 23 and 45
やば 2 and 345
.
利用区切り文字 (23,45 -> 23_45)
ながのキーになるすべてのキーはnumeric)とみなす.又は記のキーを最大で長さ (23,45 -> 00230045 (for key1 and key2 NUMBER(4,0)))
.
することも認識しOracles特徴とするDbに対応す)を定義する次ページの複数のカラムがより速く、拡張可能なクリーンに加わずに分割concatinatedます。