实现数据仓库的upsert

ZDNet软件频道 时间:2004-03-12 作者:Builder.com |  我要评论()
本文关键词:
Upsert是指由INSERT和UPDATE语句功能组合成的单个子句。Upsert模型在数据仓库中尤其有用,在数据仓库中我们需要下面的逻辑:
本文译自Builder.com,未经许可请勿转载

Upsert是指由INSERT和UPDATE语句功能组合成的单个子句。Upsert模型在数据仓库中尤其有用,在数据仓库中我们需要下面的逻辑:

IF FOUND
   THEN UPDATE
ELSE
   INSERT;

我们经常需要多个INSERT和SELECT(IAS)语句共同使用,这个时候upsert就非常有用。这是因为upsert不需要每次一行地处理数据,它能够将整个事务作为一个单一的集合来处理。

下面让我们用一个例子来说明upsert。假设我们需要一个NEW_CUSTOMERS表并将其数据放到另外两个表中。RICH_CUSTOMERS表由NEW_CUSTOMERS表中credit_limit >100000的那些客户的数据组成,而CUSTOMER表则由所有余下客户的数据组成。

在Oracle8i中,这个操作需要两个语句:

INSERT INTO
   rich_customers
(cust_id,cust_credit_limit)
SELECT cust_id, cust_credit_limit
FROM new_customers
WHERE credit_limit >=100000;

INSERT INTO customers SELECT * FROM new_customers;

在Oracle9i中,upsert只要用一条语句就可以实现这个要求:

INSERT
FIRST WHEN
   credit_limit >=100000
THEN INTO
   rich_customers
VALUES(cust_id,cust_credit_limit)
   INTO customers
ELSE
   INTO customers SELECT * FROM new_customers;


本文作者: Donald Burleson是有23年经验的数据库管理员,他出版过14本数据库专著,发表论文达100多篇。Donald Burleson是Oracle Internals的主编和Burleson Oracle Consulting的总裁。


责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134