这是一个更大的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?一旦从原始表复制了一条记录,它就会从原始表中删除。
2条答案
按热度按时间zbsbpyhn1#
archivedate是一个日期字段,因此它应该默认为sysdate,而不是当前的时间戳。这消除了每次插入时的转换。
正如其他人所说,只需列出列:
不需要包含newkey或archivedate,因为它们将在insert上初始化。
jfewjypa2#
如果您在半小时前(发布问题时)开始键入这45列,那么您的代码就已经启动并运行了。
无论如何:使用星号(
*
)在select
可能不是最好的主意;为什么?你希望得到什么好处?保存一些键盘笔划?因为,如果显式地命名所有列,就可以确切地知道哪个值进入哪个列。如果在这两个表中的一个表中添加了一个新列怎么办?insert into select *
再也不行了。您所要求的可以使用一些动态sql(因此,在pl/sql中)通过查询来完成
user_tab_columns
,组成insert into
语句,注意差异(标识和时间戳列)。一旦你完成了编码和测试,就像我说的-一个简单的命名所有这些列将在很久以前完成。如果我是你,我会这么做:说出所有45列的名字。