从SELECT插入但在中间更改一列?

时间:2019-04-10 10:08:27

标签: oracle insert-select

想知道是否有一种方法可以将一行从另一表插入到表中,但中间的一列除外,而不指定所有列名吗?表中有128列。

我创建了一个视图来存储原始记录。

CREATE VIEW V_TXN_STG AS
SELECT * FROM TXN_STG;

在表TXN_STG中,只有一列BRN_CODE在更改。

类似的事情是行不通的,因为该列不在表的最后,而是在表结构的中间。

INSERT INTO TXN_STG 
SELECT v.*, 'BRN-001' AS BRN_CODE 
FROM V_TXN_STG v;

2 个答案:

答案 0 :(得分:0)

我认为,如果没有在选择中明确指定列,这是不可能的。

答案 1 :(得分:0)

首先,您必须获取列:

SELECT listagg(column_name, ',') within group (order by column_name) columns
FROM all_tab_columns
WHERE table_name = 'AAA' --Table to insert too
and column_name <> 'B' -- column name you want to exclude
GROUP BY table_name;

然后将结果插入第一行:

insert into aaa(A,C) -- A,C is my result from above,I have excluded column B
select * 
from (select 'a' A,'q' AMOUNT,'c' C from dual union all -- my sample data
select 'a','a','c'  from dual union all
select 'a','b','c'  from dual union all
select 'a','c','c' from dual union all
select 'a','d','c'  from dual ) 
pivot
( 
  max(1)   
  for (AMOUNT) -- the column you want to remove from the sample data
  IN ()
) 
where 1=1 
order by A;