我有两个表,foo
和bar
,它们以一对多的关系相互关联:
CREATE TABLE foo (
id NUMBER PRIMARY KEY
);
CREATE TABLE bar (
id NUMBER PRIMARY KEY,
foo NUMBER NOT NULL,
CONSTRAINT fk_bar_foo FOREIGN KEY (foo) REFERENCES foo (id)
);
现在,我想在两个表之间创建一个具有LEFT JOIN
的视图,其中视图中的每一行都有一个唯一的id
,所以我尝试了以下操作:
CREATE OR REPLACE my_view AS
SELECT ORA_HASH(foo.id || '~' || bar.id) id
FROM foo
LEFT JOIN bar ON bar.foo = foo.id
我的问题是,视图的列id
变得可以为null,即使它永远不可能具有值NULL
。为了与另一个应用程序一起使用,我需要在视图中有一个唯一的不可为null的id。
我能以某种方式欺骗Oracle使该列不可为null吗?或者是否有其他方法可以生成不可为null的唯一id?
与其从两个现有表的id构建id,不如基于sys_guid()构建它呢?类似于:
CREATE OR REPLACE view my_view AS
SELECT sys_guid() id
FROM foo
LEFT JOIN bar ON bar.foo = foo.id