我有一个超集集表如下:
col1 col2 col3 col4 col5 col6
我也有子集表,其列将动态创建,我之前不知道列名,但列名将始终是超集表中存在的列的子集:
例如。 子集表可能是:
**CASE1**:
col1 col2
1 2
或者在某些情况下可能是
**CASE2**:
col1 col5 col6
1 5 6
或者可能是:
**CASE3**:
col3 col6
3 6
我想在超集表中仅为子集中存在的列插入数据。对于子集中不存在的列,我想设置一些默认值:
案例1: 超集表应该有:
col1 col2 col3 col4 col5 col6
1 2 defualt_value defualt_value defualt_value defualt_value
案例2: 超集表应该有:
col1 col2 col3 col4 col5 col6
1 defualt_value defualt_value defualt_value 5 6
案例3: 超集表应该有:
col1 col2 col3 col4 col5 col6
defualt_value defualt_value 3 defualt_value defualt_value 6
请帮助!!
答案 0 :(得分:0)
也许这会有所帮助......
测试表和数据(来自您的问题:“...仅在子集中存在的那些列中插入超集表中的数据。对于子集中不存在的列,我想设置一些默认值”)
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**