Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 View. Как создать не нулевой столбец.  [new]
Владимир СА
Member

Откуда:
Сообщений: 7825
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

Имеется таблица. На ее основе во вьюхе строится дерево.
CREATE OR REPLACE FORCE VIEW V_APP_SETTING
(
    ID,
    CODE,
    PARENT_ID,
    VALUE,
    DISPLAY_NAME,
    DESCRIPTION,
    APP_SETTING_TYPE_ID,
    DATA_TYPE_ID,
    DATA_TYPE_NAME,
    META
)
AS
               SELECT s.ID,
                      s.CODE,
                      s.PARENT_ID,
                      s.VALUE,
                      s.DISPLAY_NAME,
                      s.DESCRIPTION,
                      s.APP_SETTING_TYPE_ID,
                      s.DATA_TYPE_ID,
                      t.NAME     AS DATA_TYPE_NAME,
                      s.META
                 FROM APP_SETTING s
                      LEFT JOIN DATA_TYPE t ON t.ID = s.DATA_TYPE_ID
                WHERE IS_HIDDEN = 'N'
           START WITH PARENT_ID IS NULL
           CONNECT BY PRIOR s.ID = s.PARENT_ID
    ORDER SIBLINGS BY ORD;

Потом вьюху кидают в модель приложения.
Для работы в модели нужно, чтобы поле ID было NOT NULL.
Но в таблице APP_SETTING и так поле s.ID NOT NULL.
Почему в представлении поле отображается как NULL ?
И возможно ли сделать его не NULL ?
20 мар 20, 18:15    [22103143]     Ответить | Цитировать Сообщить модератору
 Re: View. Как создать не нулевой столбец.  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 693
Владимир СА,

Оракл затрудняется правильно получить метаданные по деревяшке над внешним соединением - вынеси соединение наружу.

create table t1(id not null) as select 1 from dual;
create table t2(id) as select 0 from dual;

create or replace view v1 as 
select t1.id i1, t2.id i2
  from t1
  left join t2 on t1.id = t2.id
 start with t1.id = 1
connect by prior t1.id + 1 = t1.id;

create or replace view v2 as 
select i1, t2.id i2
  from (select t1.id i1
          from t1
         start with t1.id = 1
        connect by prior t1.id + 1 = t1.id)
  left join t2 on i1 = t2.id;


SQL> desc v1
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 I1                                                 NUMBER
 I2                                                 NUMBER

SQL> desc v2
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 I1                                        NOT NULL NUMBER
 I2                                                 NUMBER


Вторая альтернатива - переписывание в Oracle native syntax + еще один трюк.
20 мар 20, 19:48    [22103232]     Ответить | Цитировать Сообщить модератору
 Re: View. Как создать не нулевой столбец.  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9815
Кобанчег

Вторая альтернатива - переписывание в Oracle native syntax + еще один трюк.


Ну и WITH CHECK OPTION.

SY.
20 мар 20, 21:19    [22103292]     Ответить | Цитировать Сообщить модератору
 Re: View. Как создать не нулевой столбец.  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 693
SY
Кобанчег

Вторая альтернатива - переписывание в Oracle native syntax + еще один трюк.


Ну и WITH CHECK OPTION.

SY.
Я думал это для проверки обновляемых представлений, но с удовольствием посмотрю на пример как это влияет на метаданные представления.
21 мар 20, 00:11    [22103372]     Ответить | Цитировать Сообщить модератору
 Re: View. Как создать не нулевой столбец.  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9815
Кобанчег
Я думал это для проверки обновляемых представлений, но с удовольствием посмотрю на пример как это влияет на метаданные представления.


A, прочитал по-диагонали. Показалось нужно enforce NOT NULL.

SY.

Сообщение было отредактировано: 21 мар 20, 14:16
21 мар 20, 14:15    [22103526]     Ответить | Цитировать Сообщить модератору
 Re: View. Как создать не нулевой столбец.  [new]
Владимир СА
Member

Откуда:
Сообщений: 7825
Кобанчег
Вторая альтернатива - переписывание в Oracle native syntax + еще один трюк.
Спасибо.
Именно этим и воспользовался.
23 мар 20, 07:53    [22104212]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить