Oracle
有沒有辦法在視圖中明確地有一個非空列
如果我在 Oracle 中創建視圖,則列定義的非空特性是從基表繼承的:
create table tq84_t ( col_1 number, col_2 varchar2(15) not null ); create view tq84_v as select col_1, col_2 from tq84_t; desc tq84_v;
將列印
Name Null? Type --------------- -------- ----------------------------------------- COL_1 NUMBER COL_2 NOT NULL VARCHAR2(15)
現在,如果視圖的 select 語句包含 a
union all
,似乎該特徵不再被繼承:drop view tq84_v; create view tq84_v as select col_1, col_2 from tq84_t where col_1 < 10 union all select col_1, col_2 from tq84_t where col_2 > 20; desc tq84_v;
印刷:
Name Null? Type --------------- -------- ----------------------------------------- COL_1 NUMBER COL_2 VARCHAR2(15)
這對我的目的來說有點不幸。那麼,有沒有辦法明確聲明一列
not null
用於 Oracle 中的視圖?注意:我顯然使用了簡化的視圖定義來展示問題,我可以在不使用
union all
. 然而,我的實際視圖定義要復雜得多,需要union all
.
從文件中:
您只能在視圖上指定唯一、主鍵和外鍵約束。但是,您可以使用 WITH CHECK OPTION 子句定義視圖,這相當於為視圖指定檢查約束。
所以似乎沒有辦法向 RDBMS 暗示底層數據(在
UNION ALL
創建內聯視圖之後)是NOT NULL
.這一切看起來有點傻,因為 ///語句
UNION
都需要匹配的數據類型!UNION ALL``INTERSECT``MINUS