8

TABLE1列のあるテーブルがありますCOL_TAB1

select * from TABLE1:
 COL_TAB1
|    1   |
|    2   |
|    3   |

そして、最初の列を参照するTABLE2別のテーブルCOL_TAB2COL_TAB1

select * from TABLE2:
 COL_TAB2  |  COL_TAB1
| val1     |     1
| val2     |     2
| val2     |     3

次のクエリと同じ結果が得られるように、table1に仮想列を追加することは可能ですか?

select 
    t1.COL_TAB1, 
    (select t2.COL_TAB2 from TABLE2 t2 where t2.COL_TAB1 = t1.COL_TAB1)
from TABLE1 t1

私は試した :

alter table TABLE1 add (
    SOME_COL_NAME as (select t2.COL_TAB2 from TABLE2 t2 where t2.COL_TAB1 = COL_TAB1)
)

しかし、それは私に与えますORA-00936: missing expression

4

2 に答える 2

11

仮想列に関するOracleのドキュメントには、かなり明確に記載されています。同じテーブル内の列のみを参照できます。

仮想列の定義で使用される式には、次の制限があります。

  • 名前で別の仮想列を参照することはできません。
  • 同じテーブルで定義されている列のみを参照できます。
  • 確定的ユーザー定義関数を参照している場合、パーティション化キー列として使用することはできません。
  • 式の出力はスカラー値である必要があります。Oracleが提供するデータ型、ユーザー定義型、またはLOBまたはLONG​​RAWを返すことはできません。

@JoeStefanelliが述べているように、あなたが望むことをするための最善の策は、ビューを作成することです。

于 2012-09-28T15:40:21.223 に答える
2

この場合、ビューを作成するのがおそらく最善の策です。

CREATE VIEW vwTable1and2
AS
    SELECT t1.COL_TAB1, t2.COL_TAB2
        FROM TABLE1 t1
            INNER JOIN TABLE2 t2
                ON t1.COL_TAB1 = t2.COL_TAB1
于 2012-09-28T15:40:29.867 に答える