Skip to main content

Oracle Merge 语法详解

用过Hibernate的,大家对方法saveOrUpdate()一定都不陌生,它的意思是如果存在就update,如果不存在就insert。如果没有用Hibernate,那怎么实现? 常规方法就是我们自己去判断这个数据是insert还是update,但是如果每次都去查询一下决定insert/update,性能不一定很理想,尤其当数据超过千万,你需要频繁做这样的操作,性能一定很差。今天介绍Oracle自带的merge,就可以解决这个问题,性能比普通操作有2-3个数量级的提升。

语法:

Merge的来源表和目标表

merge

当不匹配的时候,就insert

merge_insert_clause

当匹配的时候,就update

merge_update_clause

匹配条件

where_clause

用merge, 从表的数据不能有重复的数据。

例子:

[sql]
CREATE TABLE bonuses (employee_id NUMBER, bonus NUMBER DEFAULT 100);

INSERT INTO bonuses(employee_id)
(SELECT e.employee_id FROM employees e, orders o
WHERE e.employee_id = o.sales_rep_id
GROUP BY e.employee_id);

SELECT * FROM bonuses ORDER BY employee_id;

EMPLOYEE_ID BONUS
———– ———-
153 100
154 100
155 100
156 100
158 100
159 100
160 100
161 100
163 100

MERGE INTO bonuses D
USING (SELECT employee_id, salary, department_id FROM employees
WHERE department_id = 80) S
ON (D.employee_id = S.employee_id)
WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01
DELETE WHERE (S.salary > 8000)
WHEN NOT MATCHED THEN INSERT (D.employee_id, D.bonus)
VALUES (S.employee_id, S.salary*.01)
WHERE (S.salary <= 8000);

SELECT * FROM bonuses ORDER BY employee_id;

EMPLOYEE_ID BONUS
———– ———-
153 180
154 175
155 170
159 180
160 175
161 170
179 620
173 610
165 680
166 640
164 720
172 730
167 620
171 740

[/sql]

希望遇到这种场景的,可以用merge帮大家解决问题。

Jupyter Notebook安装

Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。在本文中,我们将介绍 Jupyter notebook 的主要特性,以及为什么对于希望编写漂亮的交互式文档的人来说是一个强大工具。

安装Jupyter

如果你熟悉pip安装工具,可以直接用下边的命令安装Jupyter类库
pip3 install –upgrade pip
pip3 install jupyter

01

启动Jupyter 就会看到下面的界面:
02

我的jupyter notebook 是部署在虚拟主机上的,启动命令是jupyter notebook –log-level=DEBUG –allow-root,但是浏览器一直不能访问,不知道具体什么原因,研究了很久也没有找到问题。
后边加上确定的IP地址,就可以直接访问虚拟主机上的jupyter notebook了,希望遇到这样问题的也能这样解决。
jupyter notebook –log-level=DEBUG –allow-root –ip=192.168.32.128

03

链接

install jupyter