使用LEFT JOIN在Oracle视图中生成非NULL的唯一ID



我有两个表,foobar,它们以一对多的关系相互关联:

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

相关内容

  • 没有找到相关文章

最新更新