想知道是否有一种方法可以将一行从另一表插入到表中,但中间的一列除外,而不指定所有列名吗?表中有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;
答案 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;