我使用的是oracle数据库12c。我有 VK_ORDER
包含大量冗余数据的表,并带有列组合 OID
以及 EXID
. 表中有列 FILENAME
其中,文件名是给定的,数据从中插入到该表中,并且该表具有 SYSTEM_INSERTED_AT
插入数据的日期和时间列。每天的作业都运行在这个表和冗余数据的组合上 OID
以及 EXID
正在插入此表。
我已经创建了另一个表 VK_MODIFY
包含以下列:
OID
EXID
FILENAME
FIRST_INSERT_DATE
LATEST_MODIFY_DATE
现在我想写sql语句,我不确定 Merge
sql语句在以下条件下工作:
如果列值的组合 OID, EXID
表中尚不存在,则:
- Insert a new row
- Set FIRST_INSERT_DATE = LATEST_MODIFY_DATE = now()
- Write the name of the file to FILENAME
如果列的组合值 OID, EXID
表中已存在,则:
- set LATEST_MODIFY_DATE = now()
- append the name of the file to FILENAME (prepend a comma – no space)
然后我就可以一天运行一次这个查询来更新我的 VK_MODIFY
table。我不知道如何写这个sql语句,是否可以使用oraclesql语句。 DDL
为了 VK_MODIFY
与具有相同数据类型的表 VK_ORDER
table。
CREATE TABLE
VK_MODIFY
(
FIRST_INSERT_DATE TIMESTAMP(6) NOT NULL,
LATEST_MODIFY_DATE TIMESTAMP(6) NOT NULL,
FILENAME VARCHAR2(60) NOT NULL,
OID INTEGER,
EXID VARCHAR2(100)
)
2条答案
按热度按时间xdyibdwo1#
你可以用
MERGE
查询如下:thtygnil2#
假设oid和exid都不为空,
匹配时使用(select*from vk|order)o on((m.oid,m.exid)=(o.oid,o.exid))然后更新set m.filename=m.filename | |','| | o.filename,latest|modify|date=sysdate当不匹配时插入(oid,exid,filename,first|insert|date,latest|modify|date)值(o.oid,o.exid,o.filename,sysdate,sysdate);