У меня есть две таблицы, foo
и bar
, которые связаны друг с другом с один-ко-многим отношения:Создать уникальный идентификатор, который не является NULL в представлении Oracle с LEFT JOIN?
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
. Для этого, чтобы работать с другим приложением, мне нужно иметь уникальный идентификатор без нуля для представления.
Могу ли я как-то обмануть Oracle, чтобы сделать столбец нецелевым? Или существует какой-то другой способ генерации уникального идентификатора, который не является нулевым?
См http://stackoverflow.com/questions/11097839/how-to-create-a-not-null-column-in-a-view –
Я думаю, что вы можете сделать это с материализованный вид, но не с обычным видом. –