Sql 如何在ORACLE中一次更新所有列而不指定列名

Sql 如何在ORACLE中一次更新所有列而不指定列名,sql,oracle,Sql,Oracle,如何在不指定列名的情况下一次更新所有列 假设我有表A ID NAME AGE 21 MATT 45 表B ID NAME AGE 21 SCOTT 24 我所期望的 update table A set A.columns=B.columns 基本上,我正在尝试同步两个表。据我所知,如果不指定列名,就无法更新表列值。您的目的是使表A具有与表B相同的值,然后可以从表A中删除所有行,并将数据复制到表A delete from A; insert into A select

如何在不指定列名的情况下一次更新所有列

假设我有表
A

ID  NAME  AGE
21  MATT  45
B

ID NAME   AGE
21 SCOTT  24
我所期望的

update table A 
   set A.columns=B.columns

基本上,我正在尝试同步两个表。

据我所知,如果不指定列名,就无法更新表列值。您的目的是使表A具有与表B相同的值,然后可以从表A中删除所有行,并将数据复制到表A

delete from A;
insert into A select * from B;
commit;
如果您有一些原因只使用
update
语句,并且有很多列,那么您可以使用字典生成
update
语句

select 'A.'||column_name||'=B.'||column_name||','
from all_tab_columns
where owner = 'your schema name'
  and table_name = 'A';
执行查询并复制结果并进行编辑

update A
set <paste the result of previous query here>
;
更新A
设置
;

您可以在PLSQL中执行此操作:

for src in ( select * from B ) loop
  update A set ROW = src where A.id = src.id; 
end loop;    
或用于插入

for src in ( select * from B ) loop
  insert into A values src; 
end loop;

如果不指定列名,则无法执行
更新
(为什么要这样做?)。如果我们假设列是按相同的顺序定义的,并且具有相同的数据类型,那么您可以删除A中的所有数据,然后将B中的所有数据插入A中。但是,我们会问,为什么您要尝试在同一数据库(可能在同一架构中)中使用相同的数据创建两个表。