在oracle中将数据从子集表插入超集表
Posted
技术标签:
【中文标题】在oracle中将数据从子集表插入超集表【英文标题】:Insert data from a subset table to a superset table in oracle 【发布时间】:2018-04-24 19:01:33 【问题描述】:我有一个像这样的超集表:
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
请帮忙!!
【问题讨论】:
【参考方案1】:也许这会有所帮助......
测试表和数据(来自您的问题:“......在超集表中插入数据仅用于子集中存在的那些列。对于子集中不存在的列,我想放置一些默认值”)
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**
【讨论】:
以上是关于在oracle中将数据从子集表插入超集表的主要内容,如果未能解决你的问题,请参考以下文章
oracle中,如何在一张表插入数据,使得插入数据的某些字段为其他表中的数据
oracle数据库中都有哪些字符集,字符集之间的子集和超集关系是怎么样的?
是否可以在 Oracle 中将表中的一行作为 DML(插入、更新)返回?