Se eu criar uma visão no Oracle, a característica não nula da definição da coluna é herdada da tabela base:
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;
vai imprimir
Name Null? Type
--------------- -------- -----------------------------------------
COL_1 NUMBER
COL_2 NOT NULL VARCHAR2(15)
Agora, se a instrução select da view contiver um union all
, parece que essa característica não é mais herdada:
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;
estampas:
Name Null? Type
--------------- -------- -----------------------------------------
COL_1 NUMBER
COL_2 VARCHAR2(15)
Isso é um pouco lamentável para os meus propósitos. Então, existe uma maneira de declarar explicitamente que uma coluna é not null
para uma exibição no Oracle?
Observação: obviamente usei uma definição de exibição simplificada para demonstrar o problema e poderia reescrever a definição de exibição sem usar union all
. No entanto, minha definição de exibição real é muito mais complicada, exigindo o union all
.
Da documentação :
Portanto, parece que não há como sugerir ao RDBMS que os dados subjacentes (após a
UNION ALL
criação da exibição em linha) sãoNOT NULL
.Isso tudo parece um pouco bobo, dado que todas as instruções
UNION
/UNION ALL
/INTERSECT
/MINUS
requerem tipos de dados correspondentes!