首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Insert into table when row not else table when SQL

Insert into table when row not else table when SQL
EN

Stack Overflow用户
提问于 2020-06-16 16:52:39
回答 2查看 487关注 0票数 0

我使用的是Oracle数据库12C。我有一个包含大量冗余数据的VK_ORDER表,其中包含OIDEXID列的组合。该表具有列FILENAME,其中提供了在该表中插入数据的文件名;该表具有SYSTEM_INSERTED_AT列,该列是插入数据的日期和时间。日常作业正在此表上运行,组合OIDEXID的冗余数据将插入到此表中。

我已经创建了另一个包含以下列的表VK_MODIFY

代码语言:javascript
复制
OID
EXID
FILENAME
FIRST_INSERT_DATE 
LATEST_MODIFY_DATE 

现在我想写sql语句,我不确定Merge sql语句是否适用于以下条件:

如果表中尚不存在列值组合OID, EXID,则:

代码语言:javascript
复制
- Insert a new row
- Set FIRST_INSERT_DATE = LATEST_MODIFY_DATE = now()
- Write the name of the file to FILENAME

如果表中已存在列值OID, EXID的组合,则:

代码语言:javascript
复制
- set LATEST_MODIFY_DATE = now()
- append the name of the file to FILENAME (prepend a comma – no space)

然后,我可以每天运行该查询一次来更新我的VK_MODIFY表。我不确定如何编写这个sql语句,以及是否可以使用oracle sql语句。

VK_ORDER表具有相同数据类型的VK_MODIFY表的DDL

代码语言:javascript
复制
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)
)
EN

回答 2

Stack Overflow用户

发布于 2020-06-16 17:03:49

您可以按如下方式使用MERGE查询:

代码语言:javascript
复制
MERGE INTO VK_MODIFY T
USING (SELECT * FROM VK_ORDER) S
   ON (T.OID = S.OID AND (T.EXID = S.EXID OR (T.EXID IS NULL AND S.EXID IS NULL)))
WHEN MATCHED THEN
   UPDATE SET T.FILENAME = S.FILENAME || ',' || T.FILENAME,
              T.LATEST_MODIFY_DATE = SYSDATE
WHEN NOT MATCHED THEN
    INSERT(OID, EXID, FILENAME, FIRST_INSERT_DATE, LATEST_MODIFY_DATE) 
     VALUES (S.OID, S.EXID, S.FILENAME, SYSDATE, SYSDATE);
票数 2
EN

Stack Overflow用户

发布于 2020-06-16 17:04:29

假设oid和exid都不为空,

代码语言:javascript
复制
merge into vk_modify M 

匹配时使用(select * from vk_order) O on ((M.OID,M.EXID) = (O.OID,O.EXID))然后更新集合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);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62404629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档