Вставить данные из таблицы подмножеств в таблицу надмножеств в oracle - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть таблица наборов надмножеств, например, так:

col1 col2 col3 col4 col5 col6 

У меня также есть таблица подмножеств, столбцы которой будут создаваться динамически, и я заранее не знаю имен столбцов, но имена столбцов всегда будут подмножествомстолбцы, которые присутствуют в супер заданной таблице:

Например,таблица подмножества может быть:

**CASE1**:

col1 col2
1     2

Или в некоторых случаях это может быть

**CASE2**:

col1 col5 col6
1     5    6

Или это может быть:

**CASE3**:

col3 col6 
3    6

Я хочу вставить данные вТаблица надмножеств только для тех столбцов, которые присутствуют в подмножестве. Для столбцов, которые не присутствуют в подмножестве, я хочу указать значение по умолчанию:

Case1: таблица надмножеств должна иметь:

 col1 col2  col3            col4            col5            col6
 1    2     defualt_value   defualt_value   defualt_value   defualt_value 

Case2: таблица superset должна иметь:

 col1   col2            col3            col4            col5    col6
 1      defualt_value   defualt_value   defualt_value   5       6

Case3: таблица superset должна иметь:

col1           col2            col3   col4            col5               col6
defualt_value  defualt_value   3      defualt_value   defualt_value       6

Пожалуйста, помогите !!

1 Ответ

0 голосов
/ 25 апреля 2018

Может быть, это поможет ...

Проверить таблицу и данные (из вашего вопроса: "... вставлять данные в таблицу надмножества только для тех столбцов, которые присутствуют в подмножестве. Для столбцов, которые не являютсяприсутствует в подмножестве, я хочу поставить некоторое значение по умолчанию ")

create table superset (
  id   number generated always as identity start with 7000 primary key
, col1 number default 111
, col2 number default 222
, col3 number default 333
, col4 number default 444
, col5 number default 555
, col6 number default 666
, remarks varchar2( 256 ) default 'subset id unknown'
);

-- insert test data
begin
-- case 1
  insert into superset ( col1, col2, remarks ) values ( 1, 2, '**CASE1**' ) ;
-- case 2
  insert into superset ( col1, col5, col6, remarks ) values ( 1, 5, 6, '**CASE2**' ) ;  
-- case 3
  insert into superset ( col3, col6, remarks ) values ( 3, 6 , '**CASE3**') ;
--4 some other stuff - the inserted rows do not belong to any known subset
  insert into superset ( col1 ) values ( 1 );
  insert into superset ( col2 ) values ( 2 );
  insert into superset ( col3 ) values ( 3 );
  insert into superset ( col4 ) values ( 4 );
  insert into superset ( col5 ) values ( 5 );
  insert into superset ( col6 ) values ( 6 );
end;
/

Таблица SUPERSET теперь содержит:

SQL> select * from superset;
ID    COL1  COL2  COL3  COL4  COL5  COL6  REMARKS            
7000  1     2     333   444   555   666   **CASE1**          
7001  1     222   333   444   5     6     **CASE2**          
7002  111   222   3     444   555   6     **CASE3**          
7003  1     222   333   444   555   666   subset id unknown  
7004  111   2     333   444   555   666   subset id unknown  
7005  111   222   3     444   555   666   subset id unknown  
7006  111   222   333   4     555   666   subset id unknown  
7007  111   222   333   444   5     666   subset id unknown  
7008  111   222   333   444   555   6     subset id unknown 

Теперь вы можете создать представление для каждого подмножества, например

create or replace view subset1_view
as 
select col1, col2 
from superset
where remarks = '**CASE1**' ;

SQL> select * from subset1_view;
COL1  COL2  
1     2 

Или

create or replace view subset1_view
as 
select * 
from superset
where remarks = '**CASE1**' ;

SQL> select * from subset1_view;
ID    COL1  COL2  COL3  COL4  COL5  COL6  REMARKS    
7000  1     2     333   444   555   666   **CASE1** 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...