将记录从一个oracle sql表复制到另一个具有额外列的表

ttisahbt  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(334)

这是一个更大的java程序的一部分,但我正在寻找一种在oraclesql中将记录从一个表复制到另一个表的方法。原来的表是45列。第二个表是原始表的存档表。
edit—它有相同的45列,但也有一个newkey列—在存档表中使用

("NEWKEY" NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1)

和存档日期列

"ARCHIVEDATE" DATE DEFAULT CURRENT_TIMESTAMP

有什么方法可以在洛杉矶进行查询吗

INSERT INTO Archive_Table A
SELECT * (plus NEWKEY, ARCHIVEDATE) FROM Original Table O
WHERE O.CUSTKEY = passed_param;

其中唯一传递的参数是custkey?一旦从原始表复制了一条记录,它就会从原始表中删除。

zbsbpyhn

zbsbpyhn1#

archivedate是一个日期字段,因此它应该默认为sysdate,而不是当前的时间戳。这消除了每次插入时的转换。
正如其他人所说,只需列出列:

insert into archivetable (custkey, cola, colb, colc) 
select custkey, cola, colb, colc 
  from originaltable 
 where custkey = passedparam;

不需要包含newkey或archivedate,因为它们将在insert上初始化。

jfewjypa

jfewjypa2#

如果您在半小时前(发布问题时)开始键入这45列,那么您的代码就已经启动并运行了。
无论如何:使用星号( * )在 select 可能不是最好的主意;为什么?你希望得到什么好处?保存一些键盘笔划?因为,如果显式地命名所有列,就可以确切地知道哪个值进入哪个列。如果在这两个表中的一个表中添加了一个新列怎么办? insert into select * 再也不行了。
您所要求的可以使用一些动态sql(因此,在pl/sql中)通过查询来完成 user_tab_columns ,组成 insert into 语句,注意差异(标识和时间戳列)。一旦你完成了编码和测试,就像我说的-一个简单的命名所有这些列将在很久以前完成。
如果我是你,我会这么做:说出所有45列的名字。

相关问题